43.3.9 自动配置的Spring WebFlux测试

你可以使用@WebFluxTest检测Spring WebFlux控制器是否工作正常。该注解将自动配置Spring WebFlux设施,并且只扫描注解@Controller@ControllerAdvice@JsonComponentConverterGenericConverterFilterWebFluxConfigurer的bean。其他常规的@Component bean将不会被扫描。

如果你需要注册额外的组件,比如Jackson模块,你可以在你的测试上使用@Import来导入另外的配置类。

通常@WebFluxTest只限于单个控制器(controller)使用,并结合@MockBean以提供需要的协作者(collaborators)的mock实现。

@WebFluxTest也会自动配置WebTestClient。WebTestClient为快速测试WebFlux控制器提供了一种强大的方式,并且不需要启动一个完整的HTTP服务器。

使用@AutoConfigureWebTestClient注解一个non-@WebFluxTest的类(比如@SpringBootTest)也可以自动配置WebTestClient。下面的例子展示了一个同时使用@WebFluxTestWebTestClient的类:

import org.junit.Test;
import org.junit.runner.RunWith;

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.context.junit4.SpringRunner;
import org.springframework.test.web.reactive.server.WebTestClient;

@RunWith(SpringRunner.class)
@WebFluxTest(UserVehicleController.class)
public class MyControllerTests {

    @Autowired
    private WebTestClient webClient;

    @MockBean
    private UserVehicleService userVehicleService;

    @Test
    public 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");
    }

}

附录中可以查看@WebFluxTest开启的自动配置列表。

有时,光光编写Spring MVC测试是不够的。Spring Boot可以帮助你在实际的服务器上运行完整的端到端的测试

最后更新于