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 может помочь вам выполнить полные сквозные тесты с реальным сервером.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки