Ich habe wenig Arbeitscode, um MockMVc
auf verschiedene Arten mit dem neuen Spring Boot 1.4 @WebMvcTest
einzurichten. Ich verstehe den StandaloneSetup-Ansatz. Was ich wissen möchte, ist der Unterschied zwischen dem Einrichten von MockMvc
bis WebApplicationContext
und dem automatischen Starten von MockMvc
.
Code-Snippet 1: MockMvc durch WebApplicationContext Setup
%Vor% Gemäß der Dokumentation WebMvcTest
API, Standardmäßig werden Tests, die mit @WebMvcTest versehen sind, auch Spring Security und MockMvc automatisch konfigurieren. Also habe ich hier einen 401 Unauthorized Status Code erwartet, aber der Test wird mit einem 200 Status Code bestanden.
Als nächstes probierte ich die automatische Verdrahtung MockMvc
, aber der Test schlägt mit 401 Unauthorized Statuscode fehl, es sei denn, ich füge @AutoConfigureMockMvc(secure=false)
hinzu oder aktualisiere die @WebMvcTest
Annotation, um die Sicherheit zu deaktivieren:
Es folgt der Code, der NUR NACH dem expliziten Deaktivieren der Sicherheit weitergegeben wird.
Code-Snippet 2: MockMvc durch Autowiring
Meine Fragen sind also:
Warum hat Code-Snippet 1 keinen 401-Statuscode-Fehler gemeldet, während die automatische Verkabelung MockMvc
ausgeführt hat. Wiederholen Sie auch, was das offizielle Dokument sagt Standardmäßig werden Tests, die mit @WebMvcTest versehen sind, auch Spring Security und MockMvc automatisch konfigurieren. Aber in diesem Fall scheint @WebMvcTest
nichts mit der automatischen Konfiguration zu tun zu haben Spring-Sicherheit (weil Code-Snippet 1 ohne 401-Fehler übergeht). Es läuft schließlich darauf hinaus, wie ich das MockMvc
aufstelle. Habe ich hier Recht?
Was sind die Unterschiede / Ziele zwischen beiden Ansätzen?
Wie unterscheidet sich das Deaktivieren der Sicherheit über @AutoConfigureMockMvc(secure=false)
von dem durch @WebMvcTest(controllers = IndexController.class, secure = false)
? Welche ist die bevorzugte Annäherung oder wann (oder wo), um sie zu verwenden?
Ich stoße auch auf ein ähnliches Problem. @WebMvcTest konfiguriert automatisch Spring Security mit Basic Auth, aber ich habe eine WebSecurityConfig-Klasse, die WebSecurityConfigurerAdapter erweitert. In dieser Klasse habe ich Basic Auth und Token Base Security deaktiviert. Das bedeutet, dass die WebSecurityConfig-Klasse nicht zum Konfigurieren von Spring Security verwendet wird.
Um das Problem zu beheben, habe ich @ContextConfiguration zu meiner Komponententestklasse hinzugefügt und Abhängigkeiten der WebSecurityConfig-Klasse hinzugefügt.
%Vor%Laut diesem Thema in GitHub
@WebMvcTest Auto konfiguriert standardmäßig eine grundlegende Auth, wenn der Spring-Security-Test im Klassenpfad ist
Beantworten Sie Ihre Fragen:
Standardmäßig werden Tests, die mit @WebMvcTest mit Anmerkungen versehen sind, automatisch konfiguriert Spring Security und MockMvc (Unterstützung für HtmlUnit WebClient und Selenium WebDriver). Für eine feinere Kontrolle von MockMVC @AutoConfigureMockMvc Annotation kann verwendet werden.
Ich bin mir nicht sicher, ob das direkt damit zusammenhängt, aber es gibt einen ausstehenden Fehler Wenn Sie Spring Boot und @WebMvcTest
verwenden, wird Ihre benutzerdefinierte @EnableWebSecurity
config-Klasse ignoriert. Einige Problemumgehungen werden im Fehlerbericht erwähnt. Ich benutze:
Tags und Links spring-mvc spring-boot spring-mvc-test