【问题标题】:Unit testing for Spring Cloud Gateway Custom Filter FactorySpring Cloud Gateway 自定义过滤器工厂的单元测试
【发布时间】:2020-04-13 07:28:36
【问题描述】:

我已经为 Cloud Gateway 实现了自定义过滤器工厂。但是,我想不出编写单元测试用例的方法。 在探索默认的过滤器工厂测试用例时,我发现大多数工厂测试类都扩展了BaseWebClientTests 和测试包中的其他类。

我的问题是我应该将那些中间测试类复制粘贴到我的本地测试包中吗?这里有什么社区推荐?

【问题讨论】:

  • 您不需要这样做。 Spring 有用于服务器 Web 交换、请求和响应的模拟类
  • 谢谢让我试试。
  • 还有,发现了这个问题,请问有解决办法吗? @RahulSharma
  • 还没有。我将按照之前评论中的建议探索 Mock 类。

标签: java spring spring-cloud spring-cloud-gateway


【解决方案1】:

这是我的结果,供您参考

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);
    }

}

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 2021-02-23
    • 2020-11-04
    • 2021-07-31
    • 2018-06-21
    • 2020-11-14
    • 2023-03-04
    • 1970-01-01
    • 2019-04-27
    相关资源
    最近更新 更多