Как издеваться над Spring Webclient

#spring-boot #junit #spring-webclient

#spring-boot #junit #spring-webclient

Вопрос:

Я пытаюсь написать модульный тестовый пример, используя mockito, но получаю исключение нулевого указателя при вызове retrieve. Может кто-нибудь помочь мне, как это исправить?

Метод

 public Mono<String> retrieveSites() {
return restAPIClient.get().uri(builder -> builder.path("/someurl")
     .queryParam("param1","value1")
     .queryParam(param2,"value2")
     .build())
**.retrieve()**
.onStatus(HttpStatus::is4xxClientError, this::processClientError)
.onStatus((HttpStatus::isError), this::processServerError).bodyToMono(String.class);
}
  

Тестовый пример

   @Test
    public void shouldReturnRetrieveSites() {
        when(webClient.get()).thenReturn(requestHeadersUriSpec);
        when(builder.path(anyString())).thenReturn(builder);
        when(builder.queryParam(anyString(), anyString())).thenReturn(builder);
        when(builder.path(anyString())).thenReturn(builder);
        when(requestHeadersSpec.retrieve()).thenReturn(responseSpec);
        when(responseSpec.bodyToMono(ArgumentMatchers.<Class<String>>notNull())).thenReturn(Mono.empty());
        assertNotNull(webClientService.retrieveSites());
    }
  

Комментарии:

1. Нет особой пользы в написании модульного теста для вашего WebClient , где вы издеваетесь практически над всем. Для написания модульного теста для ваших HTTP-клиентов я бы предпочел издеваться над HTTP-связью, используя MockWebServer : rieckpil.de /…

2. Спасибо за ваше предложение @rieckpil. Включает ли плагин Jacoco эти тестовые примеры в отчеты о покрытии кода?

3. когда вы выполняете свой код WebClient , Jacoco должен включать покрытие.