Spring Boot: утилиты тестов
Несколько классов утилит тестов, которые обычно полезны при тестировании вашего приложения, упакованы как часть spring-boot.
ConfigFileApplicationContextInitializer
ConfigFileApplicationContextInitializer - это ApplicationContextInitializer, который можно применять к тестам для загрузки файлов Spring Boot application.properties. Вы можете использовать его, когда вам не нужен полный набор функций, предоставляемых @SpringBootTest, как показано в следующем примере:
@ContextConfiguration(classes = Config.class,
initializers = ConfigFileApplicationContextInitializer.class)
Использование только ConfigFileApplicationContextInitializer не обеспечивает поддержку внедрения @Value("${…}"). Его единственная задача - обеспечить загрузку файлов application.properties в Spring Environment. Для поддержки @Value вам нужно либо дополнительно настроить PropertySourcesPlaceholderConfigurer, либо использовать @SpringBootTest, который автоматически настраивает его для вас.
TestPropertyValues
TestPropertyValues позволяет быстро добавлять свойства в ConfigurableEnvironment или ConfigurableApplicationContext. Вы можете вызвать его с key=value строками следующим образом:
TestPropertyValues.of("org=Spring", "name=Boot").applyTo(env);
OutputCapture
OutputCapture является расширением JUnit, которое можно использовать для захвата выходных данных System.out и System.err. Чтобы использовать добавьте @ExtendWith(OutputCaptureExtension.class) и внедрите CapturedOutput в качестве аргумента в конструктор класса тестирования или метод тестирования следующим образом:
@ExtendWith(OutputCaptureExtension.class)
class OutputCaptureTests {
@Test
void testName(CapturedOutput output) {
System.out.println("Hello World!");
assertThat(output).contains("World");
}
}
TestRestTemplate
TestRestTemplate - это удобная альтернатива Spring RestTemplate, которая полезна в интеграционных тестах. Вы можете получить простой шаблон или тот, который отправляет обычную HTTP-аутентификацию (с именем пользователя и паролем). В любом случае шаблон ведет себя дружественно к тестам, не создавая исключений при ошибках на стороне сервера.
Spring Framework 5.0 предоставляет новый WebTestClient, который работает для интеграционных тестов WebFlux и сквозного тестирования как WebFlux, так и MVC. Он обеспечивает свободный API для утверждений, в отличие от TestRestTemplate.
Рекомендуется, но не обязательно, использовать HTTP-клиент Apache (версия 4.3.2 или выше). Если у вас есть это в вашем classpath, TestRestTemplate отвечает, настраивая клиент соответствующим образом. Если вы используете HTTP-клиент Apache, включаются некоторые дополнительные удобные для тестирования функции:
- Перенаправления не выполняются (поэтому вы можете указать место ответа).
- Файлы cookie игнорируются (поэтому шаблон не имеет состояния).
TestRestTemplate может быть создан непосредственно в ваших интеграционных тестах, как показано в следующем примере:
public class MyTest {
private TestRestTemplate template = new TestRestTemplate();
@Test
public void testRequest() throws Exception {
HttpHeaders headers = this.template.getForEntity(
"https://myhost.example.com/example", String.class).getHeaders();
assertThat(headers.getLocation()).hasHost("other.example.com");
}
}
Кроме того, если вы используете аннотацию @SpringBootTest с WebEnvironment.RANDOM_PORT или WebEnvironment.DEFINED_PORT, вы можете добавить полностью настроенный TestRestTemplate и начать его использовать. При необходимости дополнительные настройки могут быть применены через bean-компонент RestTemplateBuilder. Все URL-адреса, которые не указывают хост и порт, автоматически подключаются к встроенному серверу, как показано в следующем примере:
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class SampleWebClientTests {
@Autowired
private TestRestTemplate template;
@Test
void testRequest() {
HttpHeaders headers = this.template.getForEntity("/example", String.class).getHeaders();
assertThat(headers.getLocation()).hasHost("other.example.com");
}
@TestConfiguration(proxyBeanMethods = false)
static class Config {
@Bean
RestTemplateBuilder restTemplateBuilder() {
return new RestTemplateBuilder().setConnectTimeout(Duration.ofSeconds(1))
.setReadTimeout(Duration.ofSeconds(1));
}
}
}
Читайте также:
- Spring Boot: автоматически настроенные Spring MVC тесты
- Spring Boot: автоматически настроенные Data JPA тесты
- Spring Boot: тестирование, автоматически настроенные REST клиенты
Комментарии
Отправить комментарий