2014-01-08 108 views
6

我正在開發一個使用Spring Data和MongoDB來管理持久層的項目。我遇到了需要使用我的集成和單元測試應該處理的數據來填充一些MongoDB集合。目前我正在使用TestNG(和Spring Test)進行測試。是否有與MongoDB一起使用的DbUnit替代方案?

是否有像DbUnit這樣的工具可用於MongoDB?

基本上我希望這樣的工具可以讀取來自xml文件的文檔並將這些文檔寫入MongoDB集合中。

還是我錯過了一些明顯的東西,就像這種需求的最佳實踐?

回答

3

EmbedMongo是一個很棒的工具。它與Maven集成。

EmbedMongo允許您輕鬆設置嵌入式MongoDB實例進行測試。一旦測試完成,它已經內置了清理支持。

請參閱本教程。 http://blog.yohanliyanage.com/2012/11/integration-testing-mongodb-spring-data/

+4

請添加一個報價/從該鏈接到這個答案的例子,因爲該頁面可能會消失。 – Beryllium

+0

我會試試這個,讓你知道謝謝。 –

+0

到目前爲止,這是最好的選擇 –

0

如果你不介意執行,你總是可以使用mongodump/mongoimport/mongorestore。或者你可以使用json文件的文件並使用com.mongodb.util.JSON#parse()或jackson將該json讀入DBObjects並將它們寫入mongo。

+0

感謝您的回答。如果可能,我想要一個可以與maven集成的工具。 –

0

在我的一個項目中(其中Spring可用),我最終使用了ApplicationListener,它聽取了ContextRefreshedEvent

這是一個example:這種方法可以在每個集成測試會話開始時使用,或者如果調整了一點,甚至在每次集成測試之前都可以使用。不幸的是,它並沒有與Maven集成,並假定Spring在底層。

1

下面是簡單的,但有點生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與其中的任何對象。

+0

好的,我修好了。 –

+0

謝謝。如果它得到一些拋光可能會很好 –

相關問題