首页 > 解决方案 > Spring WebFlux,单元测试 Mono 和 Flux

问题描述

对响应式编程感兴趣,我玩了一下构建响应式 RESTful Web 服务指南。并想向前移动并添加一些单元测试。

我试图RouterFunction用普通的 Junit/Mockito 测试来测试我的处理程序()。但是,因为它是反应式的,所以处理程序返回一个Mono<ServerResponse>. 所以我只好用block()它来测试它的ServerResponse状态,但没能抽出他的身体来测试它。在网上搜索解决方案时,似乎所有示例都使用WebTestClient.

我的问题是:

鉴于所有样本都WebTestClient用于测试反应式 REST 服务,并且(单元)测试ServerResponse. 对 a 进行单元测试是一种好习惯,RouterFunction还是总是对 a 进行更广泛的测试更好WebTestClient

非常感谢。

标签: javaunit-testingspring-bootreactive-programmingspring-webflux

解决方案


似乎最好的做法是使用WebTestClient. 然而,这个可以在没有运行服务器的情况下使用;

spring-test模块包括一个WebTestClient可用于在有或没有正在运行的服务器的情况下测试 WebFlux 服务器端点。

-- https://docs.spring.io/spring/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/html/web-reactive.html#web-reactive-tests


推荐阅读