Spring Boot: автоматически настроенные Spring WebFlux тесты
Чтобы проверить, что контроллеры Spring WebFlux работают должным образом, вы можете использовать аннотацию @WebFluxTest. @WebFluxTest автоматически настраивает инфраструктуру Spring WebFlux и ограничивает отсканированные bean-компоненты до @Controller, @ControllerAdvice, @JsonComponent, Converter, GenericConverter, WebFilter и WebFluxConfigurer. Обычные компоненты @Component не сканируются, когда используется аннотация @WebFluxTest.
Если вам нужно зарегистрировать дополнительные компоненты, такие как Jackson Module, вы можете импортировать дополнительные классы конфигурации, используя @Import в своем тесте.
Часто @WebFluxTest ограничивается одним контроллером и используется в сочетании с аннотацией @MockBean для предоставления mock реализаций для необходимых компонентов.
@WebFluxTest также автоматически настраивает WebTestClient, который предлагает мощный способ быстрого тестирования контроллеров WebFlux без необходимости запуска полного HTTP-сервера.
Вы также можете автоматически настроить WebTestClient в не-WebFluxTest (например, @SpringBootTest), пометив его с помощью @AutoConfigureWebTestClient. В следующем примере показан класс, который использует @WebFluxTest и WebTestClient:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.reactive.server.WebTestClient;
@WebFluxTest(UserVehicleController.class)
class MyControllerTests {
@Autowired
private WebTestClient webClient;
@MockBean
private UserVehicleService userVehicleService;
@Test
void testExample() throws Exception {
given(this.userVehicleService.getVehicleDetails("sboot"))
.willReturn(new VehicleDetails("Honda", "Civic"));
this.webClient.get().uri("/sboot/vehicle").accept(MediaType.TEXT_PLAIN)
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Honda Civic");
}
}
Эта настройка поддерживается только приложениями WebFlux, поскольку использование WebTestClient в смоделированном веб-приложении в настоящее время работает только с WebFlux.
@WebFluxTest не может обнаружить маршруты, зарегистрированные через функциональную веб-среду. Для тестирования компонентов RouterFunction в контексте рассмотрите возможность самостоятельного импорта RouterFunction через @Import или с помощью @SpringBootTest.
@WebFluxTest не может обнаружить пользовательскую конфигурацию безопасности, зарегистрированную через @Bean типа SecurityWebFilterChain. Чтобы включить это в ваш тест, вам нужно будет импортировать конфигурацию, которая регистрирует компонент через @Import, или использовать @SpringBootTest.
Иногда написание тестов Spring WebFlux недостаточно; Spring Boot может помочь вам выполнить полные сквозные тесты с реальным сервером.
Читайте также:
- Spring Boot: автоматически настроенные Spring MVC тесты
- Spring Boot: автоматически настроенные JSON тесты
- Spring Boot: автоматически настроенные тесты
Комментарии
Отправить комментарий