与 MongoDB 集成测试?

6

我需要使用Java对Mongo数据库进行多项集成测试,并寻找类似于DbUnit的解决方案(DbUnit用于Hibernate),以便能够将自定义数据填充到我的数据库中,并在每次运行后重置状态。

有什么建议吗?

谢谢


在这个问题下面详细回答了:https://dev59.com/cGw15IYBdhLWcg3wuuGn - KPrince36
5个回答

3
首先,我不知道Mongo有没有直接等价的DBUnit。Mongo仍然是一个新产品,所以你可能需要自己为其中一些内容“打造”。
但是,Mongo有几个功能应该使这很容易:
  1. 它以最少的权限运行
  2. 它可以简单地运行预备文件
  3. 它实际上没有架构(除了索引)
  4. 它可以处理JSON数据
根据您的数据集,有许多方法可以做到这一点。但基本工具都在那里。
  • 您应该能够从测试中启动特定版本。
  • 您应该能够从JSON文件导入“状态”数据。
  • 您应该能够应用来自JS文件的任何服务器端函数(从头开始)。
因此,整个过程应该非常简单。尽管您将不得不编写大量的粘合代码。

2
不要忘记,你可以使用Java的File.createTempFile(带有file.deleteOnExit)来轻松创建测试MongoDB存储。 - Steven

2
这是我的工作方式:连接到一个已知的(通常是共享的)mongo实例,但使用UUID为每个测试运行创建一个新的唯一数据库。您不必担心创建集合,因为它们在您第一次存储文档时会被惰性地创建。在存储库或DAO的构造函数中创建所需的任何索引;如果索引已经存在,则mongo索引创建将立即成功而不执行任何操作。显然,您不需要担心模式迁移 ;-)
这种方案要求您从空数据存储开始,但它是一个已知的状态,因此如果需要,在测试设置阶段很容易填充。
当测试完成后,在拆卸阶段删除整个数据库。

0

我知道这个问题很老了,但也许我的答案对某些人有用。 这是我最近编写的一个简单工具:https://github.com/kirilldev/mongomery

非常简单地使用json文件填充数据库:

//db here is a com.mongodb.DB instance
MongoDBTester mongoDBTester = new MongoDBTester(db);
mongoDBTester.setDBState("predefinedTestData.json");

检查数据库状态:

mongoDBTester.assertDBStateEquals("expectedTestData.json");

它支持占位符以用于预期文件,这在某些情况下非常有用。


0

您可以使用 nosql-unit,它具有一个 MongoDB 模块


0

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