是否有适用于MongoDB的DbUnit替代方案?

时间:2014-01-08 18:24:37

标签: java mongodb unit-testing dbunit spring-data-mongodb

我正在开发一个使用Spring Data和MongoDB来管理持久层的项目。我遇到了使用我的集成和单元测试应该操作的数据填充一些MongoDB集合的需求。目前我正在使用TestNG(和Spring Test)进行测试。

是否有像DbUnit这样适用于MongoDB的工具?

基本上我希望这样的工具可以从xml文件中读取文档并在MongoDB集合中编写这样的文档。

或者我错过了一些明显的东西,比如满足这种需求的最佳实践?

4 个答案:

答案 0 :(得分:3)

EmbedMongo是一个很棒的工具。它与Maven集成。

EmbedMongo允许您轻松设置嵌入式MongoDB实例以进行测试。一旦测试完成,它就具有内置的清理支持。

参见本教程。 http://blog.yohanliyanage.com/2012/11/integration-testing-mongodb-spring-data/

答案 1 :(得分: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说测试需要一个文件在" Movies"收集名称为Titanic和1997年。此外,它必须包含非空字段_id,其中包含任何对象。

答案 2 :(得分:0)

如果你不介意执行,你总是可以使用mongodump / mongoimport / mongorestore。或者你可以使用json文件的文件,并使用com.mongodb.util.JSON#parse()或jackson将json读入DBObjects并将其写入mongo。

答案 3 :(得分:0)

在我的一个项目中(Spring可用)我最终使用ApplicationListener来监听ContextRefreshedEvent

这是一个example:这种方法可以在每个集成测试会话开始时使用,或者,如果稍微调整一下,甚至可以在每次集成测试之前使用。不幸的是,它没有与Maven集成,并假设Spring处于幕后。