Was macht unit-test-controller-layer?
Bietet Muster für Unit-Tests von REST-Controllern mit MockMvc und @WebMvcTest. Erzeugt Controllertests, die Request/Response-Mapping, Validierung, Ausnahmebehandlung und HTTP-Statuscodes validieren. Verwenden Sie dies, wenn Sie Web-Controller isoliert testen möchten, z. B. für API-Endpunkt-Tests, Spring MVC-Tests, simulierte HTTP-Anfragen oder Unit-Tests der Controllerschicht.
Verwendung mit KI-Assistenten
Dieser Skill kann mit KI-gestützten Code-Assistenten wie Claude Code, Cursor oder Codex verwendet werden. Bitten Sie Ihren Assistenten, einen Controller-Test unter Verwendung des folgenden Musters zu generieren:
@Test
void shouldReturnXxx_whenYyyCondition() throws Exception {
mockMvc.perform(post("/api/resource")
.contentType(MediaType.APPLICATION_JSON)
.content("""
{ "field": "value" }
"""))
.andExpect(status().isOk())
.andExpect(jsonPath("$.result").value("expectedValue"));
}
Unterstützte Testframeworks
- MockMvc – simuliert HTTP-Anfragen und -Antworten
- @WebMvcTest – lädt nur den Web-Layer-Kontext für schnelle Tests
- JUnit 5 – Standard-Testframework
- AssertJ / Hamcrest – für benutzerfreundliche Assertions
Typische Testfälle
- Erfolgreicher API-Aufruf – überprüft korrektes Mapping und Status 2xx
- Validierungsfehler – testet Fehlerbehandlung bei ungültigen Eingaben
- Ausnahmebehandlung – prüft, ob benutzerdefinierte Ausnahmen korrekt in HTTP-Fehler umgewandelt werden
- Statuscodeprüfung – stellt sicher, dass alle Aktionen den erwarteten HTTP-Status zurückgeben (200, 201, 404, 400, 500 usw.)
Beispiel-Integration mit Spring Boot
@WebMvcTest(MeinController.class)
class MeinControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private MeinService meinService;
@Test
void sollteBenutzerErstellen() throws Exception {
// Given
String benutzerJson = """
{ "name": "Max Mustermann", "email": "[email protected]" }
""";
// When & Then
mockMvc.perform(post("/api/benutzer")
.contentType(MediaType.APPLICATION_JSON)
.content(benutzerJson))
.andExpect(status().isCreated());
}
}
Häufige Fehler und Lösungen
- Problem:
NoSuchBeanDefinitionExceptionfür abhängige Services.- Lösung: Verwenden Sie
@MockBeanfür alle Service-Abhängigkeiten im Controller.
- Lösung: Verwenden Sie
- Problem: Falsche Statuscodes nach Validierungsfehlern.
- Lösung: Stellen Sie sicher, dass
MethodArgumentNotValidExceptionkorrekt in@ControllerAdvicebehandelt wird.
- Lösung: Stellen Sie sicher, dass