Java 与MongoDB的集成测试?

Java 与MongoDB的集成测试?,java,mongodb,integration-testing,Java,Mongodb,Integration Testing,我需要使用Java在Mongo数据库上进行几个集成测试,我正在寻找一个类似DbUnit的解决方案(DbUnit是Hibernate的),它可以用自定义数据填充我的数据库,并在每次运行后重置状态 有什么建议吗 谢谢下面是我要做的:连接到一个已知(通常共享)的mongo实例,但是使用UUID为每个测试运行创建一个新的唯一数据库。您不必担心创建集合,因为当您第一次将文档存储在集合中时,它们是惰性创建的。在存储库或DAO的构造函数中创建所需的任何索引;如果索引已经存在,mongo索引创建将立即成功,而无

我需要使用Java在Mongo数据库上进行几个集成测试,我正在寻找一个类似DbUnit的解决方案(DbUnit是Hibernate的),它可以用自定义数据填充我的数据库,并在每次运行后重置状态

有什么建议吗


谢谢

下面是我要做的:连接到一个已知(通常共享)的mongo实例,但是使用UUID为每个测试运行创建一个新的唯一数据库。您不必担心创建集合,因为当您第一次将文档存储在集合中时,它们是惰性创建的。在存储库或DAO的构造函数中创建所需的任何索引;如果索引已经存在,mongo索引创建将立即成功,而无需做任何工作。显然,您不需要担心模式迁移;-)

这个方案要求您从一个空的数据存储开始,但它是一个已知的状态,所以如果需要,可以很容易地在测试的设置阶段进行填充


测试完成后,在拆卸阶段删除整个数据库。

首先,我不知道是否有任何直接等效于DBUnit for Mongo的数据库。Mongo仍然是一个新产品,因此您可能需要为一些此类产品“推出自己的产品”

但是,Mongo有几个特性可以让这变得简单:

  • 它以最小权限运行
  • 它可以简单地在准备好的文件上“运行”
  • 它实际上没有模式(索引除外)
  • 它可以处理JSON数据
  • 根据您的数据集,有很多方法可以做到这一点。但是基本的工具在那里

    • 您应该能够从测试中启动专门用于测试的版本
    • 您应该能够从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存储。详细回答了这个问题