2014-01-08 8 views
6

Ich entwickle ein Projekt, das Spring Data und MongoDB verwendet, um die Persistenzschicht zu verwalten. Ich stieß auf die Notwendigkeit, einige MongoDB-Sammlungen mit Daten zu füllen, die meine Integrations- und Komponententests manipulieren sollten. Derzeit verwende ich TestNG (und Spring Test) zum Testen.Gibt es eine DbUnit-Alternative, die mit MongoDB funktioniert?

Gibt es ein Tool wie DbUnit, das mit MongoDB funktioniert?

Grundsätzlich möchte ich, dass ein solches Tool Dokumente aus einer XML-Datei lesen und solche Dokumente in eine MongoDB-Sammlung schreiben kann.

Oder fehlt mir etwas offensichtlich, wie eine Best Practice für diese Art von Bedürfnissen?

Antwort

3

EmbedMongo ist ein großartiges Tool für diesen Zweck. Und es integriert sich mit Maven.

Mit EmbedMongo können Sie einfach eine eingebettete MongoDB-Instanz für den Test einrichten. Sobald die Tests abgeschlossen sind, wurde die Säuberungsfunktion eingebaut.

Siehe dieses Tutorial. http://blog.yohanliyanage.com/2012/11/integration-testing-mongodb-spring-data/

+4

Bitte fügen Sie ein Zitat/ein Beispiel aus diesem Link zu dieser Antwort hinzu, da diese Seite möglicherweise nicht mehr angezeigt wird. – Beryllium

+0

Ich werde das versuchen und Sie wissen, danke. –

+0

Bis jetzt ist dies die beste Alternative –

0

Sie könnten immer mongodump/mongoimport/mongorestore verwenden, wenn Sie nichts dagegen haben. Oder Sie könnten eine Datei mit JSON-Dokumenten verwenden und com.mongodb.util.JSON # parse() oder jackson verwenden, um diese json in DBObjects zu lesen und diese an mongo zu schreiben.

+0

Danke für Ihre Antwort. Ich möchte ein Werkzeug, das wenn möglich mit Maven integriert werden kann. –

0

In einem meiner Projekte (in denen Spring verfügbar war) endete ich mit einer ApplicationListener, die auf eine ContextRefreshedEvent hört.

Hier ist ein example: dieser Ansatz kann zu Beginn jeder Integrationstestsitzung verwendet werden oder, wenn ein bisschen optimiert wurde, sogar vor jedem Integrationstest. Leider passt es nicht zu Maven und nimmt an, dass Spring unter der Haube ist.

1

ist hier einfach, aber ein wenig roh util die DB-Zustand eingestellt werden, um in json beschrieben: https://github.com/kirilldev/mongomery

zu laden Datenbankstatus nur zwei Zeilen Code schreiben müssen:

//db here is a com.mongodb.DB instance 
MongoDBTester mongoDBTester = new MongoDBTester(db); 
mongoDBTester.setDBState("predefinedTestData.json"); 

Um zu überprüfen, db Zustand:

mongoDBTester.assertDBStateEquals("expectedTestData.json"); 

Es gibt zwei Möglichkeiten, json Dateien mit erwarteten Daten zu schreiben:

Strenge Übereinstimmung. Dies ist die übliche JSON-Datei, die den DB-Zustand darstellt. In den meisten Fällen benötigen Sie nicht mehr als eine genaue Beschreibung des DB-Zustands nach dem Test.

Muster übereinstimmen. Wenn Sie zufällige Zeichenfolgen in Ihrem Test verwenden möchten oder wenn Ihre Geschäftslogik beispielsweise zufällige IDs für Entitäten generiert, möchten Sie vielleicht etwas mehr als strikte Übereinstimmung:

{"Movies": [{"_id": "$ anyObject () "," name ":" Titanic "," Jahr ": 1997}]}

Json oben sagt, dass Test erwartet ein Dokument in" Movies "Sammlung, die den Namen Titanic und ein Jahr 1997 haben wird. Auch muss es haben Nicht-Null-Feld _id mit einem beliebigen Objekt darin.

+0

ok, ich habe es behoben. –

+0

Danke. Könnte nett sein, wenn es etwas Polieren bekommt –

Verwandte Themen