使用MongoDB进行集成测试?

时间:2010-10-04 21:06:49

标签: java mongodb integration-testing

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

任何提示?

由于

5 个答案:

答案 0 :(得分:3)

首先,我不知道任何直接等同于Mongo的DBUnit。 Mongo仍然是一个新产品,所以你可能不得不为这些东西“推出自己的”。

然而,Mongo的一些功能应该可以轻松实现:

  1. 以最小权限运行
  2. 它可以简单地“运行”在准备好的文件上
  3. 它实际上没有架构(索引除外)
  4. 它可以使用JSON数据
  5. 根据您的数据集,有很多方法可以做到这一点。但基本工具就在那里。

    • 您应该能够从测试中开始专门针对您的测试的版本。
    • 您应该能够从JSON文件导入“状态”数据。
    • 您应该能够从JS文件(从头开始)应用任何服务器端函数。

    所以整件事应该非常简单。虽然你将不得不写很多胶水代码。

答案 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