在Spring Webflux中编写集成测试的最佳方法

时间:2018-08-02 00:49:05

标签: spring spring-webflux

我不希望Spring自动进行网络客户端测试。我的应用程序在opeshift上运行。除非它在同一模块中找到@spring引导配置,否则Spring引导测试无法正常工作。我正在使用其他模块进行集成测试。

文档不够清晰,无法区分webfluxtest与springboottest之间的区别

2 个答案:

答案 0 :(得分:1)

据我了解,您希望进行基于Spring WebFlux的集成测试,而不会通过测试初始化​​应用程序的Spring Context。

在这种情况下,您可以使用WebTestClient来实现。

  

要测试的客户端可以绑定到真实服务器或与特定服务器一起使用   控制器或功能。

在IntegrationTest文件中,您可以构建客户端并测试期望的输出,如下所示:

@Test
public void testWebTestClientWithServerURL() {
    WebTestClient.bindToServer()
        .baseUrl("http://localhost:" + port)
        .build()
        .get()
        .uri("/resource")
        .exchange()
        .expectStatus()
        .isOk()
        .expectBody();
}

基于该链接https://www.baeldung.com/spring-5-webclient

进入细节:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/web/reactive/server/WebTestClient.html#bindToServer-org.springframework.http.client.reactive.ClientHttpConnector-

答案 1 :(得分:0)

这是我如何在类路径中没有SpringBoot的情况下针对webflux应用进行测试的方法:

@RunWith(SpringRunner::class)
@ContextConfiguration(classes = [AppConfig::class])
class WebApiTest {
    @Autowired
    lateinit var context: ApplicationContext

    lateinit var testClient: WebTestClient
    lateinit var client: WebClient

    @Before
    fun setUp() {
        testClient = WebTestClient.bindToApplicationContext(context).build()
        client = WebClient.builder()
                .clientConnector(HttpHandlerConnector(WebHttpHandlerBuilder.applicationContext(context).build()))
                .build()
    }
}

代码是用Kotlin编写的,但是可能每个人都知道如何用Java重写代码。

相关问题