我正在使用响应式全局过滤器在网关响应中添加cookie,例如:
chain.filter(exchange).then(<a mono relevant to response>)
当我尝试使用spock进行测试时,不会从已存根的Mono中调用 then 方法。
过滤器本身:
@Override
public Mono<Void> filter(ServerWebExchange exchange,GatewayFilterChain chain) {
return chain.filter(exchange)
.then(refreshCookiesMono(exchange));
}
private Mono<Void> refreshCookiesMono(ServerWebExchange exchange) {
return Mono.fromRunnable(() -> {
//interactions with *exchange* and *chain*
});
}
尽管最后以0 * _结束,该测试仍通过:
@Subject
CookieFilter cookieFilter = new CookieFilter(cookieHelper)
...
ServerWebExchange exchange = Mock ServerWebExchange
GatewayFilterChain chain = Mock GatewayFilterChain
Mono<Void> mono = Mock Mono
...
def "cookieFilter refreshes the cookie with a new value"() {
given:
when:
cookieFilter.filter(exchange,chain)
then:
1 * chain.filter(exchange) >> mono
0 * _
}
但是在代码中,我从 .filter 方法返回的mono中调用 .then 。
为什么不考虑 mono.then()?当然,当我尝试测试所有基本逻辑时,spock找不到交互。