假设我有一个简单的网络过滤器,它只写一个反应器上下文
WebFilter filter = (serverWebExchange, webFilterChain) ->
webFilterChain
.filter(serverWebExchange)
.contextWrite(Context.of("my-key", true));
我想测试会是这样的:
StepVerifier.create(filter.filter(serverWebExchange, webFilterChain)
.expectAccessibleContext()
.hasKey("my-key")
.then()
.verifyComplete();
但我不知道如何模拟webFilterChain
以确保Context被编写。
Mockito.when(webFilterChain.filter(any()).thenReturn(???)
有什么想法吗?
我有同样的问题,这是我的解决方案
WebFilterChain filterChain = filterExchange -> Mono.empty();
MockServerWebExchange exchange = MockServerWebExchange.from(
MockServerHttpRequest
.get("/your-url")
.header("my-key", "value"));
StepVerifier.create(yourFilter.filter(exchange, filterChain))
.expectAccessibleContext()
.hasKey("my-key")
.then()
.verifyComplete();
https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/test/java/org/springframework/web/cors/reactive/CorsWebFilterTests.java
因为方法webFilterChain.filter(any())
不返回任何内容(它是一个void方法(,我建议验证是否调用了该方法:
Mockito.verify(webFilterChain, times(1)).filter(any());