Ich erstelle mithilfe von Spring Boot 1.5.1 eine sehr einfache Webanwendung und wollte Integrationstests für die Überprüfung von REST-Endpunkten erstellen. Wie in der Dokumentation empfohlen, könnte MockMvc dafür verwendet werden.
Hier ist eine sehr einfache Testklasse:
%Vor%Wie erwartet startet es den vollständigen Anwendungskontext und führt Tests aus.
Später habe ich andere ähnliche Testklassen erstellt und bemerkt, dass der neue Anwendungskontext für jede Testklasse gestartet wird. Experimente zeigen, dass der Kontext nur zwischen Testklassen desselben Pakets geteilt wird.
Wenn zum Beispiel die gleiche Testklasse mehrmals kopiert wird, sind die Kontexte wie folgt:
%Vor% Auch weitere Untersuchungen haben ergeben, dass es sich um @AutoConfigureMockMvc
Annotation handelt. Wenn die Annotations- und MockMvc-bezogenen Testfälle entfernt werden, haben alle drei Klassen den gleichen Kontext .
Die Frage ist also, wie man geteilten Kontext für alle Tests mit MockMvc bekommt
Hinweis: Andere Ressourcen schlagen vor, MockMvcBuilders.webAppContextSetup(context).build()
zum Abrufen der MockMvc-Instanz zu verwenden, aber es funktioniert nicht für mich (es beinhaltet keine Filter bei der Verarbeitung von Webanforderungen).
Es scheint ein Bug zu sein, der mit Spring Boot 1.5 eingeführt wurde: Ссылка
Sie können ein Downgrade auf Spring Boot 1.4.x versuchen oder auf die fixe Version warten (geplant für die nächste Version 1.5.5).
Aktualisierung: Anstelle von "@AutoConfigureMockMvc" können Sie Ihren MockMVC auch manuell konfigurieren: Ссылка
Manuelle Konfiguration der MockMVC funktionierte gut in meinem Projekt.
Was meinst du mit "es beinhaltet keine Filter bei der Verarbeitung von Web-Anfragen"?
Tags und Links spring-mvc spring-boot junit spring-mvc-test