Модульное тестирование Spring Cloud Gateway Custom Filter Factory

Я реализовал фабрики настраиваемых фильтров для Cloud Gateway. Однако я не мог понять, как писать модульные тесты. Изучая тестовые примеры фабрик фильтров по умолчанию, я обнаружил, что большинство тестовых классов фабрик расширяет BaseWebClientTests и другие классы, которые находятся в тестовом пакете.

Мой вопрос в том, что я должен скопировать эти промежуточные тестовые классы в свой локальный тестовый пакет? Какая здесь рекомендация сообщества?


person Rahul Sharma    schedule 20.12.2019    source источник
comment
Вам не нужно этого делать. Spring имеет макетные классы для веб-обмена сервером, запроса и ответа   -  person spencergibb    schedule 21.12.2019
comment
Спасибо, позволь мне попробовать.   -  person Rahul Sharma    schedule 21.12.2019
comment
Кроме того, обнаружил эту проблему, есть ли у вас решения? @RahulSharma   -  person Spirit    schedule 03.01.2020
comment
Еще нет. Я исследую класс Mock, как предлагалось в предыдущем комментарии.   -  person Rahul Sharma    schedule 03.01.2020


Ответы (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);
    }

}
person Spirit    schedule 05.01.2020
comment
Ты спас меня, спасибо :) - person riccardo.cardin; 28.01.2021