0 Tage Serie
java / intermediate
Snippet

Überprüfung benutzerdefinierter ControllerAdvice-Antworten mit MockMvc und JSON-Path

Slice-Tests mit @WebMvcTest stellen sicher, dass von Service-Schichten geworfene Fachausnahmen durch @ExceptionHandler-Methoden korrekt in RFC-7807-ProblemDetails oder benutzerdefinierte Fehlerstrukturen überführt werden.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@WebMvcTest(OrderController.class)
class OrderControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private OrderService orderService;
@Test
void shouldReturnNotFoundProblemDetails() throws Exception {
Mockito.when(orderService.getOrder(404L))
.thenThrow(new EntityNotFoundException("Order 404 not found"));
mockMvc.perform(MockMvcRequestBuilders.get("/api/orders/404"))
.andExpect(MockMvcResultMatchers.status().isNotFound())
.andExpect(MockMvcResultMatchers.jsonPath("$.detail").value("Order 404 not found"));
}
}
spring
Erklärung
1
@WebMvcTest(OrderController.class)
Beschränkt den Testkontext auf die MVC-Ebene und richtet MockMvc sowie ControllerAdvice-Komponenten ein.
2
Mockito.when(orderService.getOrder(404L)).thenThrow(new EntityNotFoundException("Order 404 not found"));
Simuliert einen Fehlerzustand in der gemockten Service-Schicht.
3
.andExpect(MockMvcResultMatchers.jsonPath("$.detail").value("Order 404 not found"));
Verwendet JSONPath, um die serialisierte Struktur der Fehlermeldung im HTTP-Response-Body zu prüfen.