我正在开发一个使用Spring Data和MongoDB来管理持久层的项目。我遇到了使用我的集成和单元测试应该操作的数据填充一些MongoDB集合的需求。目前我正在使用TestNG(和Spring Test)进行测试。
是否有像DbUnit这样适用于MongoDB的工具?
基本上我希望这样的工具可以从xml文件中读取文档并在MongoDB集合中编写这样的文档。
或者我错过了一些明显的东西,比如满足这种需求的最佳实践?
答案 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处于幕后。