Изучение Spring Boot TestRestTemplate

Изучение Spring Boot TestRestTemplate

1. обзор

В этой статье рассматривается Spring BootTestRestTemplate. Это можно рассматривать как продолжениеThe Guide to RestTemplate, которое мы настоятельно рекомендуем прочитать, прежде чем сосредоточиться наTestRestTemplate. TestRestTemplate можно рассматривать как привлекательную альтернативуRestTemplate.

2. Maven Зависимости

Чтобы использоватьTestRestTemplate, у вас должна быть соответствующая зависимость, например:


    org.springframework.boot
    spring-boot-test
    2.1.0.RELEASE

Вы можете найти последнюю версию наMaven Central.

3. TestRestTemplate иRestTemplate

Оба эти клиента вполне подходят для написания интеграционных тестов и могут очень хорошо взаимодействовать с HTTP API.

Например, они предоставляют нам те же методы, что и стандартные методы, заголовки и другие конструкции HTTP.

И все эти операции хорошо описаны вThe Guide to RestTemplate, поэтому мы не будем возвращаться к ним здесь.

Вот простой пример запроса GET:

TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity response = testRestTemplate.
  getForEntity(FOO_RESOURCE_URL + "/1", String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

Несмотря на то, что оба класса очень похожи,TestRestTemplate не расширяетRestTemplate и предлагает несколько очень интересных новых функций.

4. Что нового вTestRestTemplate?

4.1. Конструктор с базовыми учетными данными

TestRestTemplate предоставляет конструктор, с помощью которого мы можемcreate a template with specified credentials for basic authentication.

Все запросы, выполненные с использованием этого экземпляра, будут аутентифицированы с использованием предоставленных учетных данных:

TestRestTemplate testRestTemplate
 = new TestRestTemplate("user", "passwd");
ResponseEntity response = testRestTemplate.
  getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

4.2. Конструктор сHttpClientOption

TestRestTemplate также позволяет нам настраивать базовый HTTP-клиент Apache, используяHttpClientOption which - это перечисление вTestRestTemplate со следующими параметрами:ENABLE_COOKIES, ENABLE_REDIRECTS иSSL.

Давайте посмотрим на быстрый пример:

TestRestTemplate testRestTemplate = new TestRestTemplate("user",
  "passwd", TestRestTemplate.HttpClientOption.ENABLE_COOKIES);
ResponseEntity response = testRestTemplate.
  getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK))

В приведенном выше примере мы используем параметры вместе с базовой аутентификацией.

Если нам не нужна аутентификация, мы все равно можем создать шаблон с помощью простого конструктора:

TestRestTemplate (TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. Новый метод

Не только конструкторы могут создавать шаблоны с указанными учетными данными. Мы также можем добавить учетные данные после создания нашего шаблона. TestRestTemplate дает нам методwithBasicAuth(), который добавляет учетные данные в уже существующий шаблон:

TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity response = testRestTemplate.withBasicAuth(
  "user", "passwd").getForEntity(URL_SECURED_BY_AUTHENTICATION,
  String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

5. Использование обоих TestRestTemplate иRestTemplate

TestRestTemplate может работать как оболочка дляRestTemplate, например если мы вынуждены использовать его, потому что мы имеем дело с устаревшим кодом. Ниже вы можете увидеть, как создать такую ​​простую оболочку:

RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
restTemplateBuilder.configure(restTemplate);
TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplateBuilder);
ResponseEntity response = testRestTemplate.getForEntity(
  FOO_RESOURCE_URL + "/1", String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

6. Заключение

TestRestTemplate не является расширениемRestTemplate, а скорее альтернативой, которая упрощает интеграционное тестирование и облегчает аутентификацию во время тестов. Это помогает в настройке HTTP-клиента Apache, но также может использоваться как оболочка дляRestTemplate.

Вы можете ознакомиться с примерами из этой статьиover on GitHub.