我正在開發一個使用Spring Data和MongoDB來管理持久層的項目。我遇到了需要使用我的集成和單元測試應該處理的數據來填充一些MongoDB集合。目前我正在使用TestNG(和Spring Test)進行測試。是否有與MongoDB一起使用的DbUnit替代方案?
是否有像DbUnit這樣的工具可用於MongoDB?
基本上我希望這樣的工具可以讀取來自xml文件的文檔並將這些文檔寫入MongoDB集合中。
還是我錯過了一些明顯的東西,就像這種需求的最佳實踐?
我正在開發一個使用Spring Data和MongoDB來管理持久層的項目。我遇到了需要使用我的集成和單元測試應該處理的數據來填充一些MongoDB集合。目前我正在使用TestNG(和Spring Test)進行測試。是否有與MongoDB一起使用的DbUnit替代方案?
是否有像DbUnit這樣的工具可用於MongoDB?
基本上我希望這樣的工具可以讀取來自xml文件的文檔並將這些文檔寫入MongoDB集合中。
還是我錯過了一些明顯的東西,就像這種需求的最佳實踐?
EmbedMongo是一個很棒的工具。它與Maven集成。
EmbedMongo允許您輕鬆設置嵌入式MongoDB實例進行測試。一旦測試完成,它已經內置了清理支持。
請參閱本教程。 http://blog.yohanliyanage.com/2012/11/integration-testing-mongodb-spring-data/
如果你不介意執行,你總是可以使用mongodump/mongoimport/mongorestore。或者你可以使用json文件的文件並使用com.mongodb.util.JSON#parse()或jackson將該json讀入DBObjects並將它們寫入mongo。
感謝您的回答。如果可能,我想要一個可以與maven集成的工具。 –
在我的一個項目中(其中Spring可用),我最終使用了ApplicationListener
,它聽取了ContextRefreshedEvent
。
這是一個example:這種方法可以在每個集成測試會話開始時使用,或者如果調整了一點,甚至在每次集成測試之前都可以使用。不幸的是,它並沒有與Maven集成,並假定Spring在底層。
下面是簡單的,但有點生util的,可設置爲JSON描述DB狀態:https://github.com/kirilldev/mongomery
要加載你需要只寫兩行代碼數據庫狀態:
//db here is a com.mongodb.DB instance
MongoDBTester mongoDBTester = new MongoDBTester(db);
mongoDBTester.setDBState("predefinedTestData.json");
檢查分貝狀態:
mongoDBTester.assertDBStateEquals("expectedTestData.json");
有兩種方法來編寫與預期數據的JSON文件:
嚴格匹配。這是通常的json文件,代表db狀態。在大多數情況下,測試後您並不需要精確描述db狀態。
模式匹配。如果你想在你的測試中使用隨機字符串,或者例如你的業務邏輯爲實體生成隨機ID,你可能需要比嚴格匹配更多一點:
{「Movies」:[{「_id」:「$ anyObject )「,」name「:」泰坦尼克號「,」年份「:1997}]}
json上面說測試期望在」電影「集合中有一個文件名稱爲泰坦尼克號和1997年。非空字段_id與其中的任何對象。
好的,我修好了。 –
謝謝。如果它得到一些拋光可能會很好 –
請添加一個報價/從該鏈接到這個答案的例子,因爲該頁面可能會消失。 – Beryllium
我會試試這個,讓你知道謝謝。 –
到目前爲止,這是最好的選擇 –