2015-08-26 8 views
8

Frühling hat 2 Einstellungen für den MockMvc:Wird MockMvc von Spring für Komponententests oder Integrationstests verwendet?

  1. Standalone-Setup
  2. WebApplicationContext Setup

Im Allgemeinen, welche Art von Tests MockMvc verwendet? Einheit oder Integration? oder beides?

Ist es richtig zu sagen, dass die Verwendung des Standalone-Setups (außerhalb des Anwendungskontexts von Spring) Unit-Tests schreiben kann und mit dem WebApplicationContext Setup Integrationstests geschrieben werden können?

Antwort

24

Beide Formen sind eigentlich Integrationstests, da Sie die Integration Ihres Codes mit der Spring DispatcherServlet und unterstützende Infrastruktur testen. Der Unterschied liegt in der Menge der unterstützenden Infrastruktur, die hinter den Kulissen verwendet wird.

Die Einzelheiten sind im Spring-Referenzhandbuch dokumentiert.

Noteworthy Auszüge:

Die "webAppContextSetup" lädt die aktuelle Spring MVC Konfiguration in einem vollständigeren Integrationstest führt. Da das TestContext Framework die geladene Spring-Konfiguration zwischenspeichert, hilft es, Tests laufen zu lassen, selbst wenn mehr Tests hinzugefügt werden. Darüber hinaus können Sie Mock-Dienste in Controller durch Spring-Konfiguration in injizieren, um konzentriert auf das Testen der Web-Schicht zu bleiben.

...

Die "standaloneSetup" auf der anderen Seite zu einer Einheit Test ein wenig näher ist. Es testet einen Controller zu einem Zeitpunkt, der Controller kann mit Mock Abhängigkeiten manuell injiziert werden, und es beinhaltet nicht laden Spring-Konfiguration. Solche Tests sind in der Art mehr konzentriert und machen es einfacher zu sehen, welcher Controller getestet wird, ob eine bestimmte Spring MVC-Konfiguration benötigt wird, und so weiter.Die "StandaloneSetup" ist auch eine sehr bequeme Möglichkeit, Ad-hoc-Tests zu schreiben, um einige Verhalten zu überprüfen oder ein Problem zu debuggen.

...

Genau wie bei der Integration vs Unit-Tests, gibt es keine richtige oder falsche Antwort . Die Verwendung des "StandaloneSetup" bedeutet, dass einige zusätzliche "webAppContextSetup" -Tests erforderlich sind, um die Spring MVC Konfiguration zu überprüfen. Alternativ können Sie alle Tests mit "webAppContextSetup" schreiben und immer mit der tatsächlichen Spring MVC Konfiguration testen.

...

Die in Spring MVC-Test zur Verfügung stehenden Optionen sind verschiedene Stationen auf der Skala von klassischen Einheit zum vollständigen Integration Tests. Um sicher zu sein, keine von die Optionen in Spring MVC Test sind klassische Komponententests, aber sie sind ein etwas näher dran. Zum Beispiel können Sie die Service-Schicht mit Mocks in Controller injiziert und dann testen Sie die Web Schicht nur über das DispatcherServlet und mit tatsächlichen Spring Konfiguration, genauso wie Sie die Datenbank-Schicht in Isolation der Schichten oben testen können . Oder Sie verwenden das eigenständige Setup, das sich jeweils auf einen Controller konzentriert, und stellen manuell die Konfiguration bereit, die erforderlich ist, damit es funktioniert.

Im Zweifelsfall empfehle ich zuerst das Referenzhandbuch zu lesen, bevor Sie hier Fragen stellen. ;)

Grüße,

Sam (Autor des Frühlings Testcontext Rahmen)

0

Ich würde sagen, dass beide Methoden für Integrationstests sind, aber Standalone erzwingen, dass Sie angeben, welchen Controller Sie testen.

Das Setup von WebApplicationContext lädt den gesamten Kontext, daher ist es egal, wo der spezifische Controller ist, der zum Beispiel /people POST-Anfragen bedient.

So würde ich empfehlen, WebApplicationContext Setup zum Testen Ihrer REST-API in Bezug auf die Schnittstelle zu verwenden, mit der die Anwendung arbeiten muss. Sie koppeln Test nicht mit tatsächlichem Code, dann dokumentieren Sie, wie sich die App verhalten soll.

Verwandte Themen