2016-12-05 6 views
0

Ich brauche MongoDB automatisch ausgeführt werden, wenn meine JUnit-Tests ausgeführt werden, und dann zu beenden, wenn die Tests abgeschlossen sind. Ich habe versucht, mit dem maven mongoDB Plugin, aber mongoDB scheint nicht zu laufen. Irgendeine Hilfe?Probleme beim Ausführen von MongoDB, wenn JUnit-Tests ausgeführt werden

+2

Unittests sollten die Kommunikation mit der realen Datenbank an erster Stelle verspotten (es sei denn, es handelt sich lediglich um Anwendungstests mit dem JUnit-Framework ...). –

+0

@TimothyTruckle Wenn du davon sprichst, den Mongo-Treiber zu verspotten, tu das bitte nicht. Hier ist ein Artikel, warum Sie das nicht tun sollten https://jaxenter.com/testing-the-database-layer-119366.html – tddmonkey

+0

Die Artikel Argumente sind gültig, wenn Sie Verhalten * in der Datenbank * testen. Wenn Sie (* unit- *) die Geschäftslogik außerhalb der Datenbank testen, sollten Sie den Datenbankzugriff wirklich verspotten. –

Antwort

0

Sie können für diesen Einsatz embed.mongo: https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo

Es beginnt im Grunde eine eingebettete Mongo db in der aktuellen Jvm.

Sie können es mit der @BeforeAll/@Before Klausel starten und danach stoppen und alles wird aufgeräumt.

Frühlings-Boot hat eine Auto-Konfiguration in so gebaut Sie nur eine Abhängigkeit embed.mongo hinzufügen müssen: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-mongo-embedded

Ansonsten können Sie die Dokumentation auf Github verwenden Sie Ihre eigene eingebettete Mongo db einzurichten.

0

Wenn Sie nur Komponententests durchführen, sollten Sie versuchen, die Datenbankintegration nachzuahmen. Ich musste mich jedoch gleichzeitig damit auseinandersetzen und musste die Integration zwischen Mongo/Java-Projekt testen. Das Mongo-Plugin funktionierte auch nicht für mich. Hier sind zwei Optionen, die ich ausprobiert habe, und vielleicht werden sie helfen:

Option 1 (mit Docker): In meinem Build und Deploy-Stack (Maven, Jenkins, Docker), war die einfachste Sache für mich zu tun Starten Sie einen Mongo-Container als Pre-Build-Schritt, führen Sie den Build mit den konfigurierten Integrationsumgebungseinstellungen aus, und fahren Sie den Container als Post-Build-Schritt herunter. Wenn Sie über bestimmte Daten verfügen, die Sie testen müssen, können Sie außerdem einen Container erstellen, der diese Daten enthält.

Option 2 (nur Maven/Mongo): In der Lebenszyklustufe pre-integration-tests von Maven rufen Sie das Betriebssystem unter Verwendung von Maven exec plugin an, um Mongo zu starten. Führen Sie Ihre Tests aus und stellen Sie sicher, dass diejenigen, die Mongo erfordern, während der Phase integration-test ausgeführt werden. Dann schließen Sie Mongo in der post-integration-test Phase. Abhängig von Ihren Tests kann dies schwierig sein, wenn sie den Status Ihrer Mongo-Instanz ändern. Wenn dies ein Problem ist, könnten Sie einige Skripte schreiben, um Mongo neu zu initialisieren/zu zerstören, und diese Skripte in den oben genannten Phasen aufrufen.

Maven lifecycle reference

Verwandte Themen