java / intermediate
Snippet
Isolierte Controller-Validierungstests mit @WebMvcTest
@WebMvcTest lädt ausschließlich die Web-Schicht, ohne den vollständigen Service- und Repository-Kontext zu starten. In Kombination mit MockMvc und @MockBean ermöglicht dies zielgerichtete Tests von HTTP-Statuscodes, Payload-Serialisierung und Jakarta Bean Validation-Einschränkungen.
snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@WebMvcTest(UserController.class)class UserControllerTest {@Autowiredprivate MockMvc mockMvc;@MockBeanprivate UserService userService;@Testvoid whenInvalidEmail_thenReturnsUnprocessableEntity() throws Exception {String invalidPayload = "{\"email\": \"not-an-email\"}";mockMvc.perform(post("/api/users").contentType(MediaType.APPLICATION_JSON).content(invalidPayload)).andExpect(status().isUnprocessableEntity()).andExpect(jsonPath("$.errors[0].field").value("email"));}}
spring
Erklärung
1
@WebMvcTest(UserController.class)
Instanziiert nur den angegebenen Controller und die zugrunde liegende Spring-MVC-Infrastruktur.
2
@MockBean private UserService userService;
Injiziert ein Mockito-Mock in den Kontext, um die Web-Schicht von Geschäftslogik abzukoppeln.
3
mockMvc.perform(post("/api/users")...)
Simuliert einen eingehenden HTTP-POST-Request mit JSON-Nutzlast an den Endpunkt.
4
.andExpect(status().isUnprocessableEntity())
Stellt sicher, dass der Validierungsfehler einen HTTP-422-Statuscode auslöst.