Как выполнить модульное тестирование класса, который выполняет внешний запрос WebClient?

У меня есть класс @Service, который выполняет некоторые проверки на null, а затем обращается к внешней микрослужбе с помощью WebClient. Сонар жалуется, что этот класс не тестовый, потому что метод не полностью протестирован. Вопрос в том, как я могу имитировать этот вызов или использовать для этого mockserver? Я пробовал WebTestClient, но не могу заставить что-то работать ...

public Mono<CartResponse> someServiceCall(BarRequest barRequest)

//some null checks and random logic.

return WebClient.create("http://" + fooHostName)
                .post()
                .uri(uri)
                .body(Mono.just(barRequest), BarRequest.class)
                .exchange()
                .flatMap(serviceResponse -> {
                    if (serviceResponse.statusCode().is5xxServerError()) {

                        //some error logic
                        return Mono.just(barResponse);
                    }
                    return serviceResponse.bodyToMono(BarResponse.class);
                });

Так что я не хочу на самом деле делать этот звонок, я просто хочу, чтобы он был рассмотрен в тесте, поэтому я хотел бы получить некоторое представление о том, как сделать это, либо смоделировать, либо развернуть макет сервера .. Я был в этом примерно в день сейчас ..


person Sierra Bravo    schedule 27.07.2019    source источник
comment
Вы пробовали что-то вроде wiremock.org?   -  person jonrsharpe    schedule 27.07.2019
comment
Я надеялся на встроенное решение Spring, подобное тому, как вы могли бы издеваться над вызовами RestTemplate.   -  person Sierra Bravo    schedule 27.07.2019
comment
Можете ли вы добавить код, который вы пробовали, с помощью макета   -  person Deadpool    schedule 27.07.2019


Ответы (1)


это пока еще не поддерживается для издевательств WebClient, например RestTemplate.

на github есть открытая проблема.

Поддержка MockRestServiceServer для WebClient

Сами Spring используют MockWebServer для тестирования своего собственного кода, поэтому можно с уверенностью сказать, что это жизнеспособное решение. .

person Toerktumlare    schedule 27.07.2019