Meine Frage ist eine Variation davon .
Da mein Java-Web-App-Projekt viele Lesefilter / -abfragen und Schnittstellen zu Tools wie GridFS erfordert, fällt es mir schwer, einen vernünftigen Weg zu finden, um MongoDB so einzusetzen, wie es die obige Lösung vorschlägt.
Daher erwäge ich, neben meinen Integrationstests eine eingebettete Instanz von MongoDB auszuführen. Ich möchte, dass es automatisch gestartet wird (entweder für jeden Test oder für die gesamte Suite), die Datenbank für jeden Test leert und am Ende herunterfährt . Diese Tests können sowohl auf Entwicklungsmaschinen als auch auf dem CI-Server ausgeführt werden, sodass meine Lösung auch portabel sein muss .
Kann mir jemand mit mehr Wissen über MongoDB helfen, eine Vorstellung von der Machbarkeit dieses Ansatzes zu bekommen, und / oder vielleicht Lesematerial vorschlagen, das mir beim Einstieg helfen könnte?
Ich bin auch offen für andere Vorschläge, wie ich dieses Problem angehen könnte ...
quelle
Antworten:
Hier ist eine aktualisierte (für 2019) Version der akzeptierten Antwort von @rozky (sowohl in der Mongo-Bibliothek als auch in der eingebetteten MongoDB-Bibliothek wurde viel geändert).
quelle
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
zusammen mit der obigen ÄnderungIch habe die Embedded MongoDB- Bibliothek gefunden, die vielversprechend aussieht und das tut, wonach Sie gefragt haben.
Unterstützt derzeit MongoDB-Versionen:
1.6.5
bis3.1.6
, sofern die Binärdateien weiterhin über den konfigurierten Spiegel verfügbar sind.Hier ist ein kurzes Anwendungsbeispiel, das ich gerade ausprobiert habe und das perfekt funktioniert:
quelle
com.mongodb
Java-API, daher ist es nicht komplizierter als die Verwendung der regulären API.Es gibt Foursquare Produkt Fongo . Fongo ist eine In-Memory-Java-Implementierung von Mongo. Es fängt Aufrufe des Standard-Mongo-Java-Treibers ab, um zu finden, zu aktualisieren, einzufügen, zu entfernen und andere Methoden zu verwenden. Die Hauptanwendung ist das Testen von leichten Einheiten, bei denen Sie keinen Mongo-Prozess starten möchten.
quelle
Wenn Sie Maven verwenden, könnte Sie ein Plugin interessieren, das ich erstellt habe und das die 'embedded mongo'-API von flapdoodle.de umschließt :
Embedmongo-Maven-Plugin
Es bietet ein
start
Ziel, mit dem Sie eine beliebige Version von MongoDB starten können (z. B. währendpre-integration-test
), und einstop
Ziel, mit dem MongoDB gestoppt wird (zpost-integration-test
. B. während ).Der eigentliche Vorteil der Verwendung dieses Plugins gegenüber anderen besteht darin, dass MongoDB nicht im Voraus installiert werden muss. MongoDB-Binärdateien werden heruntergeladen und
~/.embedmongo
für zukünftige Builds gespeichert .quelle
Wenn Sie sbt und specs2 verwenden, habe ich die gleiche Art von Wrapper für Embedmongo geschrieben
https://github.com/athieriot/specs2-embedmongo
quelle
Mit Spring-Boot 1.3 können Sie EmbeddedMongoAutoConfiguration verwenden
pom.xml
MongoConfig
quelle
Sie können MongoDB ab Version 3.2.6 im Speicher ausführen. Von der Website :
quelle
Nicht nur für Unit-Tests, sondern auch für die Verwendung von Inmemory Mongodb mit Rest-API.
Maven-Abhängigkeit:
================================================== ===========================
application.properties
================================================== ===========================
UserRepository.java
öffentliche Schnittstelle UserRepository erweitert MongoRepository {
}}
Als Referenz und für den gesamten Java-Code verwenden Sie den folgenden Link: (schrittweise Erklärung)
https://www.youtube.com/watch?v=2Tq2Q7EzhSA&t=7s
quelle
Die Leistung ist bei der Ausführung
mongod
mit besserstorageEngine='ephemeralForTest'
quelle
In der Produktion verwenden Sie eine echte Datenbank.
Wenn Sie möchten, dass Ihre Tests das Verhalten Ihres Produkts in der Produktion widerspiegeln, verwenden Sie eine echte Instanz von Mongo.
Eine gefälschte Implementierung verhält sich möglicherweise nicht genau so wie eine echte. Beim Testen sollten Sie auf Richtigkeit achten. Die Ausführungsgeschwindigkeit steht an zweiter Stelle.
quelle