繁体   English   中英

如何为 spring GatewayFilter 测试生成取消的请求?

[英]How do I generate canceled requests for a spring GatewayFilter test?

过滤器的filter()方法如下所示:

@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    return chain.filter(exchange).doFinally(signal -> {
            LOGGER.info("Signal: " + signal.name()); // never says CANCEL
            // ...
        });
    }
}

我需要编写单元测试以确保信号从reactor.core.publisher.SignalType获取所有可能的值。

我似乎无法生成CANCEL事件。 该测试使用 Mockito 并且应该看起来像这样,据我所知(减去我尝试过的所有事情但没有工作):

    Mono<Void> aMono = Mono.empty();
    // here I should do stuff to the mono so it gets canceled - but what?
    when(chain.filter(exchange)).thenReturn(aMono);
    Mono<Void> filtered = filter.filter(exchange, chain).block();
    // assertions should start here

chainexchange都是模拟的。 filter是被测的 object。

它永远不会发出CANCEL信号。 当发布者完成工作时,它将发送一个ON_COMPLETE信号类型。

chain.filter(exchange).doFinally(signal -> {
   LOGGER.info("Signal: " + signal.name()); // It must print ON_COMPLETE
});

此外,像上面那样测试反应流是一种不好的方法。 查看reactor-test ( https://mvnrepository.com/artifact/io.projectreactor/reactor-test/3.4.6 ) 库。 有很棒的实用程序,其中之一是StepVerifier ,它可以帮助您测试反应流。 例如:

StepVerifier.create(chain.filter(exchange))
   .verifyComplete();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM