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 {@Autowiredprivate MockMvc mockMvc;@MockBeanprivate OrderService orderService;@Testvoid 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.