1. Обзор
В этой статье рассматривается Spring Boot TestRestTemplate
. Его можно рассматривать как продолжение Руководства по RestTemplate , которое мы настоятельно рекомендуем прочитать, прежде чем сосредоточиться на TestRestTemplate
. TestRestTemplate
можно рассматривать как привлекательную альтернативу RestTemplate
.
2. Зависимости Maven
Чтобы использовать TestRestTemplate
, вам необходимо иметь соответствующую зависимость, например:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
Вы можете найти последнюю версию на Maven Central .
3. TestRestTemplate
и RestTemplate
Оба этих клиента вполне подходят для написания интеграционных тестов и очень хорошо справляются с взаимодействием с HTTP API.
Например, они предоставляют нам те же самые методы, стандартные методы, заголовки и другие конструкции HTTP.
И все эти операции хорошо описаны в Руководстве по RestTemplate , поэтому мы не будем возвращаться к ним здесь.
Вот простой пример запроса GET:
TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.
getForEntity(FOO_RESOURCE_URL + "/1", String.class);
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);
Несмотря на то, что оба класса очень похожи, TestRestTemplate
не расширяет RestTemplate
и предлагает несколько очень интересных новых функций.
4. Что нового в TestRestTemplate
?
4.1. Конструктор с базовыми учетными данными аутентификации
TestRestTemplate
предоставляет конструктор, с помощью которого мы можем создать шаблон с указанными учетными данными для базовой аутентификации .
Все запросы, выполняемые с использованием этого экземпляра, будут аутентифицироваться с использованием предоставленных учетных данных:
TestRestTemplate testRestTemplate
= new TestRestTemplate("user", "passwd");
ResponseEntity<String> response = testRestTemplate.
getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);
4.2. Конструктор с HttpClientOption
TestRestTemplate
также позволяет нам настраивать базовый HTTP-клиент Apache с помощью HttpClientOption, который
является перечислением в TestRestTemplate
со следующими параметрами: ENABLE_COOKIES, ENABLE_REDIRECTS
и SSL
.
Давайте посмотрим на быстрый пример:
TestRestTemplate testRestTemplate = new TestRestTemplate("user",
"passwd", TestRestTemplate.HttpClientOption.ENABLE_COOKIES);
ResponseEntity<String> response = testRestTemplate.
getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);
В приведенном выше примере мы используем параметры вместе с базовой аутентификацией.
Если нам не нужна аутентификация, мы все равно можем создать шаблон с помощью простого конструктора:
TestRestTemplate(TestRestTemplate.HttpClientOption.ENABLE_COOKIES)
4.3. Новый метод
Не только конструкторы могут создать шаблон с указанными учетными данными. Мы также можем добавить учетные данные после создания нашего шаблона. TestRestTemplate
дает нам метод withBasicAuth()
, который добавляет учетные данные в уже существующий шаблон:
TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.withBasicAuth(
"user", "passwd").getForEntity(URL_SECURED_BY_AUTHENTICATION,
String.class);
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);
5. Использование как TestRestTemplate, так
и RestTemplate
TestRestTemplate
может работать как оболочка для RestTemplate
, например, если мы вынуждены использовать его, потому что имеем дело с устаревшим кодом. Ниже вы можете увидеть, как создать такую простую обертку:
RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
restTemplateBuilder.configure(restTemplate);
TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplateBuilder);
ResponseEntity<String> response = testRestTemplate.getForEntity(
FOO_RESOURCE_URL + "/1", String.class);
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);
6. Заключение
TestRestTemplate
— это не расширение RestTemplate
, а скорее альтернатива, упрощающая интеграционное тестирование и облегчающая аутентификацию во время тестов. Это помогает в настройке HTTP-клиента Apache, но также может использоваться в качестве оболочки RestTemplate
.
Вы можете ознакомиться с примерами, приведенными в этой статье , на GitHub .