### Question:
BookController { @PostMapping public ResponseEntity<Void> createNewBook(@Valid @RequestBody BookRequest bookRequest, UriComponentsBuilder uriComponentsBuilder) { Long primaryKey = bookService.createNewBook(bookRequest); UriComponents uriComponents = uriComponentsBuilder.path("/api/books/{id}").buildAndExpand(primaryKey); HttpHeaders headers = new HttpHeaders(); headers.setLocation(uriComponents.toUri()); return new ResponseEntity<Void>(headers, HttpStatus.CREATED); }  @PostMapping ResponseEntity<Void> createNewBook(@Valid @RequestBody BookRequest bookRequest, UriComponentsBuilder uriComponentsBuilder); @GetMapping ResponseEntity<List<Book>> getAllBooks(); @GetMapping("/{id}") ResponseEntity<Book> getBookById(@PathVariable("id") Long id); @PutMapping("/{id}") ResponseEntity<Book> updateBook(@PathVariable("id") Long id, @Valid @RequestBody BookRequest bookRequest); @DeleteMapping("/{id}") ResponseEntity<Void> deleteBook(@PathVariable("id") Long id);  }### Answer:
@Test public void postingANewBookShouldCreateANewBook() throws Exception { BookRequest bookRequest = new BookRequest(); bookRequest.setAuthor("Duke"); bookRequest.setIsbn("1337"); bookRequest.setTitle("Java 11"); when(bookService.createNewBook(bookRequestArgumentCaptor.capture())).thenReturn(1L); this.mockMvc .perform(post("/api/books") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(bookRequest))) .andExpect(status().isCreated()) .andExpect(header().exists("Location")) .andExpect(header().string("Location", "http: assertThat(bookRequestArgumentCaptor.getValue().getAuthor(), is("Duke")); assertThat(bookRequestArgumentCaptor.getValue().getIsbn(), is("1337")); assertThat(bookRequestArgumentCaptor.getValue().getTitle(), is("Java 11")); }