Java 与MongoDB的集成测试?
我需要使用Java在Mongo数据库上进行几个集成测试,我正在寻找一个类似DbUnit的解决方案(DbUnit是Hibernate的),它可以用自定义数据填充我的数据库,并在每次运行后重置状态 有什么建议吗Java 与MongoDB的集成测试?,java,mongodb,integration-testing,Java,Mongodb,Integration Testing,我需要使用Java在Mongo数据库上进行几个集成测试,我正在寻找一个类似DbUnit的解决方案(DbUnit是Hibernate的),它可以用自定义数据填充我的数据库,并在每次运行后重置状态 有什么建议吗 谢谢下面是我要做的:连接到一个已知(通常共享)的mongo实例,但是使用UUID为每个测试运行创建一个新的唯一数据库。您不必担心创建集合,因为当您第一次将文档存储在集合中时,它们是惰性创建的。在存储库或DAO的构造函数中创建所需的任何索引;如果索引已经存在,mongo索引创建将立即成功,而无
谢谢下面是我要做的:连接到一个已知(通常共享)的mongo实例,但是使用UUID为每个测试运行创建一个新的唯一数据库。您不必担心创建集合,因为当您第一次将文档存储在集合中时,它们是惰性创建的。在存储库或DAO的构造函数中创建所需的任何索引;如果索引已经存在,mongo索引创建将立即成功,而无需做任何工作。显然,您不需要担心模式迁移;-) 这个方案要求您从一个空的数据存储开始,但它是一个已知的状态,所以如果需要,可以很容易地在测试的设置阶段进行填充
测试完成后,在拆卸阶段删除整个数据库。首先,我不知道是否有任何直接等效于DBUnit for Mongo的数据库。Mongo仍然是一个新产品,因此您可能需要为一些此类产品“推出自己的产品” 但是,Mongo有几个特性可以让这变得简单:
- 您应该能够从测试中启动专门用于测试的版本
- 您应该能够从JSON文件导入“状态”数据
- 您应该能够从JS文件(从头开始)应用任何服务器端函数
所以整个事情应该很简单。尽管您必须编写大部分粘合代码。此问题已在此处得到解答,并允许在每次测试之间启动和停止实例: 但是每个测试之间的启动/停止似乎会降低集成测试的速度,因此您最好在整个测试套件中启动/停止它:
我知道这个问题很老了,但也许我的答案对某些人有用。 下面是我最近编写的一个简单的util: 使用json文件中的数据填充db非常简单:
//db here is a com.mongodb.DB instance
MongoDBTester mongoDBTester = new MongoDBTester(db);
mongoDBTester.setDBState("predefinedTestData.json");
要检查数据库状态,请执行以下操作:
mongoDBTester.assertDBStateEquals("expectedTestData.json");
它支持在某些情况下有用的预期文件的占位符。您可以使用具有MongoDB模块的占位符别忘了,您可以使用Java的File.createTempFile(带有File.deleteOnExit)轻松创建测试mongo db存储。详细回答了这个问题