使用 MockServerHttpResponse 测试 WebFilter

Cor*_*ing 5 unit-testing mocking spring-webflux

我有一个正在测试的 org.springframework.web.server.WebFilter 。我正在嘲笑 ServerWebExchange 返回 MockServerHttpResponse。当网络过滤器想要返回错误响应时,它会使用

    private static Mono<Void> setErrorResponse(ServerWebExchange exchange, String message) {
    ServerHttpResponse response = exchange.getResponse()
    response.statusCode = HttpStatus.BAD_REQUEST
    response.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_VALUE)
    DataBuffer buffer = response.bufferFactory().wrap(message.getBytes("UTF-8"))
    return response.writeWith(Flux.just(buffer))
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过调用获取响应正文

response.getBodyAsString().block()
Run Code Online (Sandbox Code Playgroud)

但我总是得到

java.lang.IllegalStateException: No content was written nor was setComplete() called on this response.
Run Code Online (Sandbox Code Playgroud)

如何使用模拟来获取使用 writeWith() 时似乎未设置的响应主体?

sge*_*sge 0

block() 也必须在 Mono 结果上调用。

Mono<Void> mono = setErrorResponse(exchange, "ERROR");
mono.block();
Assertions.assertEquals("ERROR",exchange.getResponse().getBodyAsString().block());
Run Code Online (Sandbox Code Playgroud)