有没有适用于MongoDB的DbUnit替代品?

6
我正在开发一个使用Spring Data和MongoDB管理持久化层的项目。我需要将一些MongoDB集合与测试数据填充,以便我的集成测试和单元测试操作数据。目前,我正在使用TestNG(和Spring Test)进行测试。
是否有像DbUnit这样的工具可以与MongoDB一起使用?
基本上,我希望这样的工具能够从xml文件中读取文档,并将这些文档写入MongoDB集合。
或者我是否错过了明显的东西,比如最佳实践?
4个回答

3

5
请在此答案中添加一个引用/示例,因为该页面可能会消失。 - Beryllium
到目前为止,这是最好的替代方案。 - Marco Ferrari

1
这是一个简单但有些粗糙的工具,可以将数据库状态设置为json中描述的状态: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文件。在大多数情况下,您只需要对测试后的数据库状态进行精确描述。

模式匹配。如果您想在测试中使用随机字符串,或者例如您的业务逻辑生成实体的随机ID,则可能需要比严格匹配更多:

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

上面的JSON表示测试期望“电影”集合中有一个文档,其中将具有名称为Titanic和年份为1997的属性。此外,它必须具有非空字段_id,并且其中包含任何对象。


谢谢。如果可以进一步改进,那就太好了。 - Marco Ferrari

0

如果您不介意执行外部命令,您可以随时使用mongodump/mongoimport/mongorestore。或者,您可以使用一个JSON文档文件,并使用com.mongodb.util.JSON#parse()或jackson将其读入DBObjects,然后将其写入mongo。


谢谢您的回答。如果可能的话,我想要一个可以与Maven集成的工具。 - Marco Ferrari

0
在我的一个项目中(其中使用了Spring),我最终使用了一个ApplicationListener来监听ContextRefreshedEvent
这里有一个示例:这种方法可以在每个集成测试会话的开始使用,或者如果稍微调整一下,甚至可以在每个集成测试之前使用。不幸的是,它不与Maven集成,并且假定Spring在底层运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接