Spring hat zwei Setups für das MockMvc:
Im Allgemeinen, für welche Art von Tests wird MockMvc verwendet? Einheit oder Integration? oder beides?
Habe ich Recht damit, dass die Verwendung des Standalone-Setups (außerhalb des Anwendungskontexts von Spring) Unit-Tests schreiben kann und Sie mit dem WebApplicationContext-Setup Integrationstests schreiben können?
Beide Formulare sind eigentlich Integrationstests , da Sie die Integration Ihres Codes mit der Spring DispatcherServlet
und unterstützenden Infrastruktur testen. Der Unterschied liegt in der Menge der unterstützenden Infrastruktur, die hinter den Kulissen verwendet wird.
Die Details sind im Spring Referenzhandbuch dokumentiert.
Bemerkenswerte Auszüge:
Das "webAppContextSetup" lädt die aktuelle Spring MVC-Konfiguration was zu einem vollständigeren Integrationstest führt. Seit dem TestContext Framework Caches die geladene Spring-Konfiguration, es hilft zu halten Tests laufen schnell, auch wenn mehr Tests hinzugefügt werden. Darüber hinaus können Sie injizieren Sie gefälschte Dienste in Controller durch Spring - Konfiguration, in um sich weiterhin auf das Testen der Webschicht konzentrieren zu können.
...
Das "StandaloneSetup" ist dagegen etwas näher an einer Einheit Prüfung. Es testet jeweils einen Controller, der Controller kann sein injiziert mit Mock Abhängigkeiten manuell, und es beinhaltet nicht Laden Federkonfiguration. Solche Tests sind stilistischer und fokussierter Machen Sie es leichter zu sehen, welcher Controller getestet wird Eine bestimmte Spring MVC-Konfiguration ist erforderlich, um zu arbeiten und so weiter. Das "StandaloneSetup" ist auch eine sehr bequeme Möglichkeit, Ad-hoc-Tests zu schreiben ein Verhalten zu überprüfen oder ein Problem zu debuggen.
...
Genau wie bei der Integration gegen Unit-Tests gibt es kein richtig oder falsch Antworten. Die Verwendung des "StandaloneSetup" bedeutet, dass einige benötigt werden Zusätzliche "webAppContextSetup" -Tests zur Überprüfung der Spring MVC Aufbau. Alternativ können Sie entscheiden, alle Tests mit zu schreiben "webAppContextSetup" und immer gegen tatsächliche Spring MVC testen Konfiguration.
...
Die im Spring MVC Test angebotenen Optionen sind verschiedene Stopps auf dem skalieren Sie von der klassischen Einheit bis zu vollständigen Integrationstests. Um sicher zu sein, keine von Die Optionen im Spring MVC Test sind klassische Komponententests, aber sie sind ein etwas näher dran. Zum Beispiel können Sie die Service-Schicht isolieren mit Mocks in Controller injiziert und dann testen Sie das Web Ebene nur über das DispatcherServlet und mit tatsächlichen Spring Konfiguration, so wie Sie die Datenbankebene in Isolierung der darüber liegenden Schichten. Oder Sie könnten das Standalone verwenden Setup konzentriert sich auf einen Controller zu einem Zeitpunkt und manuell zur Verfügung stellen der Konfiguration erforderlich, damit es funktioniert.
Im Zweifelsfall empfehle ich, zuerst das Referenzhandbuch zu lesen, bevor Sie hier Fragen stellen. ;)
Grüße,
Sam ( Autor des Spring TestContext Framework )
Ich würde sagen, dass beide Methoden für Integrationstests gedacht sind, aber Sie müssen nur angeben, welcher Controller getestet wird.
WebApplicationContext Setup lädt den gesamten Kontext, daher ist es egal, wo der spezifische Controller ist, der zum Beispiel /people
POST-Anfragen liefert.
Ich würde daher empfehlen, das WebApplicationContext-Setup zum Testen Ihrer REST-API hinsichtlich der Schnittstelle zu verwenden, mit der die Anwendung arbeiten soll. Sie koppeln Test nicht mit tatsächlichem Code, dann dokumentieren Sie, wie sich die App verhalten soll.
Tags und Links java spring spring-mvc spring-test spring-test-mvc