MockMVC in Action!

Marc Nuri

MockMVC
Pyramid of testing and MockMVC
Pyramid of testing: Unit, Integration, E2E
Beer CRUD
Östia kölsch beer bottle
MockMVC Configuration types
@WebMvcTest annotation MockMvcBuilders.webAppContextSetup(WebApplicationContext.class); MockMvcBuilders.standaloneSetup(...);
100% Code Coverage
@PutMapping( path = "/{externalId}", headers = {"Special-Header=XML Babel"}, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_XML_VALUE) @ResponseStatus(HttpStatus.OK) public Beer updateBeerAsXML( @PathVariable("externalId") String externalId, @Validated @RequestBody Beer beer) { return beerService.updateBeer(externalId, beer); } @Test public void updateBeerAsXML_validBeer_shouldReturnUpdatedBeer(){ beerResource.updateBeerAsXML("OST.01", new Beer()); verify(mockBeerService, times(1)) .updateBeer(Mockito.eq("OST.01"), Mockito.any(Beer.class)); } @PutMapping( path = "/{externalId}", headers = {"Special-Header=XML Babel"}, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_XML_VALUE) @ResponseStatus(HttpStatus.OK) public Beer updateBeerAsXML( @PathVariable("externalId") String externalId, @Validated @RequestBody Beer beer) { return beerService.updateBeer(externalId, beer); } @PutMapping( path = "/{externalId}", headers = {"Special-Header=XML Babel"}, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_XML_VALUE) @ResponseStatus(HttpStatus.OK) public Beer updateBeerAsXML( @PathVariable("externalId") String externalId, @Validated @RequestBody Beer beer) { return beerService.updateBeer(externalId, beer); }
Advantages of MockMVC - What can you test
Let's get Reactive
Project Reactor
Q & A