Java Требуется Mono или Flux в качестве ответа на «когда» макет с помощью webflux - PullRequest
2 голосов
/ 14 июля 2020

Я пишу несколько тестов по контракту и пытаюсь имитировать свой контроллер, чтобы протестировать требуемый метод. Мой метод должен возвращать только код состояния 200, то есть не объект, и я не знаю, как написать это с помощью Mono или Flux, и я получаю сообщение об ошибке из-за этого.

Я пробовал что-то подобное, но это не работает:

Mono<Integer> response = Mono.just(Response.SC_OK);
when(orchestration.paymentReceived(purchase)).thenReturn(response);

Как мне написать часть «когда», чтобы убедиться, что она возвращает код состояния 200?

1 Ответ

1 голос
/ 14 июля 2020

Чтобы проверить код статуса ответа, вам нужно будет написать более сложный тест, используя WebTestClient. Примерно так:

Service service = Mockito.mock(Service.class);
WebTestClient client = WebTestClient.bindToController(new TestController(service)).build();

Теперь вы можете протестировать:

  • сериализацию в JSON или другие типы
  • тип содержимого
  • код ответа
  • путь к вашему методу
  • вызванный метод (POST, GET, DELETE, et c)

Модульные тесты не охватывают указанные выше темы.

// init mocks
when(service.getPersons(anyInt())).thenReturn(Mono.just(person));    

// execute rest resource
client.get() // invoked method
  .uri("/persons/1") // requested path
  .accept(MediaType.APPLICATION_JSON)
  .exchange()
  .expectStatus().isOk() // response code
  .expectHeader().contentType(MediaType.APPLICATION_JSON)
  .expectBody()
  .jsonPath("$.firstName").isEqualTo(person.getFirstName())
  .jsonPath("$.lastName").isEqualTo(person.getLastName())
  

// verify you have called your expected methods
verify(service).getPerson(1);

Вы можете найти больше примеров здесь . Вышеупомянутый тест также не требует контекста Spring, может работать с макетными службами.

...