我在基于Spring Cloud Gateway的网关应用程序中创建了两个WebFilter。
第一个用于添加一些操作日志的
public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {
ServerHttpResponse response = serverWebExchange.getResponse();
webFilterChain.filter(serverWebExchange).doOnTerminate(() ->{
operationLog.sendOperationLog(serverWebExchange, uri, "", response.getStatusCode().value())
})
}
我尝试通过如下所示的spring boot test对其进行测试。
@MockBean
OperationLog operationLog;
webTestClient.post().uri("/test")
.exchange()
.expectStatus().isEqualTo(HttpStatus.NOT_FOUND);
verify(operationLog, times(1))
.sendOperationLog(any(ServerWebExchange.class), any("/test"), eq(""), eq(HttpStatus.OK.value()));
测试失败,似乎没有执行doOnTerminate回调。
但是当我在环境中调试它时,它就会执行。
答案 0 :(得分:0)
您可以使用Mockito#timeout等待调用方法operationLog.sendOperationLog。像这样:
{{order.get_status_display}}
在这种情况下,mockito在100毫秒内检查调用。