我需要使用Java对Mongo数据库进行多次集成测试,我正在寻找一种类似DbUnit的解决方案(DbUnit用于Hibernate),它可以使用自定义数据填充我的数据库,并在每次运行后重置状态。
任何提示?
由于
答案 0 :(得分:3)
首先,我不知道任何直接等同于Mongo的DBUnit。 Mongo仍然是一个新产品,所以你可能不得不为这些东西“推出自己的”。
然而,Mongo的一些功能应该可以轻松实现:
根据您的数据集,有很多方法可以做到这一点。但基本工具就在那里。
所以整件事应该非常简单。虽然你将不得不写很多胶水代码。
答案 1 :(得分:2)
以下是我的工作:连接到已知(通常是共享的)mongo实例,但是使用UUID为每个测试运行创建一个新的唯一数据库。您不必担心创建集合,因为它们是第一次在其中存储文档时懒得创建的。在存储库或DAO的构造函数中创建所需的任何索引;如果索引已经存在,mongo索引创建会立即成功,而不会执行任何工作。显然,您不必担心模式迁移; - )
此方案要求您从空数据存储区开始,但它是已知状态,因此如果需要,可以很容易地填充测试的设置阶段。
测试完成后,在拆解阶段删除整个数据库。
答案 2 :(得分:0)
此问题已在此处得到解答,并允许在每个测试之间启动和停止实例: https://stackoverflow.com/a/9830861/82609
但是每次测试之间的启动/停止似乎会降低集成测试的速度,因此您最好为整个测试套件启动/停止它: https://stackoverflow.com/a/14171993/82609
答案 3 :(得分:0)
我知道这个问题很老,但也许我的回答对某人有用。 这是我最近写的一个简单的工具:https://github.com/kirilldev/mongomery
使用json文件中的数据填充db非常简单:
//db here is a com.mongodb.DB instance
MongoDBTester mongoDBTester = new MongoDBTester(db);
mongoDBTester.setDBState("predefinedTestData.json");
检查数据库状态:
mongoDBTester.assertDBStateEquals("expectedTestData.json");
它支持预期文件的占位符,这在某些情况下很有用。
答案 4 :(得分:0)
您可以使用具有MongoDB模块的nosql-unit