Wird MockMvc von Spring für Komponententests oder Integrationstests verwendet?

7

Spring hat zwei Setups für das MockMvc:

  1. Eigenständige Konfiguration
  2. WebApplicationContext-Setup

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?

    
SoftwareDeveloper 26.08.2015, 09:59
quelle

2 Antworten

25

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 )

    
Sam Brannen 26.08.2015, 12:58
quelle
0

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.

    
freakman 26.08.2015 10:55
quelle