java - Spring Cloud Gateway 自定义过滤器工厂的单元测试
问题描述
我已经为 Cloud Gateway 实现了自定义过滤器工厂。但是,我想不出编写单元测试用例的方法。在探索默认过滤器工厂测试用例时,我发现大多数工厂测试类扩展了 BaseWebClientTests和测试包中的其他类。
我的问题是我应该将那些中间测试类复制粘贴到我的本地测试包中吗?这里有什么社区推荐?
解决方案
这是我的结果,供您参考
class CustomGatewayFilterFactoryTest {
@Autowired
private CustomGatewayFilterFactory factory;
private ServerWebExchange exchange;
private GatewayFilterChain filterChain = mock(GatewayFilterChain.class);
private ArgumentCaptor<ServerWebExchange> captor = ArgumentCaptor.forClass(ServerWebExchange.class);
@BeforeEach
void setup() {
when(filterChain.filter(captor.capture())).thenReturn(Mono.empty());
}
@Test
void customTest() {
MockServerHttpRequest request = MockServerHttpRequest.get(DUMMY_URL).build();
exchange = MockServerWebExchange.from(request);
GatewayFilter filter = factory.apply(YOUR_FACTORY_CONFIG);
filter.filter(exchange, filterChain);
// filter.filter(exchange, filterChain).block(); if you have any reactive methods
ServerHttpRequest actualRequest = captor.getValue().getRequest();
// Now you can assert anything in the actualRequest
assertEquals(request, actualRequest);
}
}
推荐阅读
- c++ - 为什么显式模板实例化不起作用?
- apache - 如何在centos中使用环境变量覆盖文件中的值
- javascript - 影响自动填充解决方法的 Javascript 执行顺序
- vba - 是否有一种简单的方法来确定打开选项卡中的哪个页面以读取 Access 中的表格?
- javascript - 如何修复 Heroku 中的“错误:'heroku/nodejs' buildpack 不支持应用程序”错误?
- elasticsearch - 您在 Elasticsearch 节点中保留多少个月的日志数据考虑最佳实践?
- java - 如何从麦克风录制声音?
- scala - 应用程序以play framework 2.5启动时如何注入(application:Application)?
- java - 我通过 JQuery 有 datepicker 的文本框,但 datepicker 不工作
- c# - 将完整路径转换为带有环境变量的路径