简体   繁体   中英

Java Mono or Flux needed as response for “when” mock with webflux

I am writing some contract tests and I am trying to mock my controller in order to test the wanted method. My method should only return status code 200, so not an object, and I do not know how to write this with Mono or Flux and I get an error because of that.

I tried something like this, but it does not work:

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

How should I write my "when" part in order to verify it returns status code 200?

In order to check response status code you will need to write a more complicated test, using WebTestClient. Like so:

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

Now you are able to test:

  • serialization to JSON or other types
  • content type
  • response code
  • path to your method
  • invoked method (POST,GET,DELETE, etc)

Unit tests do not cover above topics.

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

You can find more examples here . Above test is also does not require Spring context, can work with mock services.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM