使用 Embedded Mongo 或已安装的实例进行集成测试

Posted

技术标签:

【中文标题】使用 Embedded Mongo 或已安装的实例进行集成测试【英文标题】:Integration tests with Embedded Mongo or the installed instance 【发布时间】:2012-04-26 04:42:03 【问题描述】:

我正在开发的应用程序是一个 Velocity/Spring MVC/Mongo on tomcat 类型的 webapp。

我可以在 Embedded Mongo 上运行我的集成测试,使用 EmbedMongo 运行所有测试需要更长的时间,比如大约 1 分钟,但在已安装的 Mongo 上的测试数据库上,大约需要 15 秒。

在创建新数据库时使用嵌入式数据库进行集成测试真的有什么好处吗?(在这种情况下,同一实例中的测试数据库)可以忽略不计吗?事实上,测试本身可以创建数据库和所需的集合。

除了在不需要常规安装的 CI 盒上使用 Embedded Mongo 之外,我看不出它有什么太大的好处。

任何人都可以分享任何想法。

谢谢 高拉夫

【问题讨论】:

【参考方案1】:

查看该链接: https://***.com/a/9830861/82609

看起来不错,但是 MongoDB 在每次测试之间启动和关闭。

为了提高速度,您可能想做的是为整个测试套件启动和关闭一次。 我的意思是:在测试之间保持 MongoDB 实例正常运行。


但您不希望您的测试相互依赖。因此,您可以做的是使用不同的数据库名称 (UUID),以便最终运行一个 MongoDB 实例,其中包含许多不同的数据库,每个测试一个。

或者你可以在每次测试之间清理你的数据库。

【讨论】:

【参考方案2】:

使用单独安装的实例,您需要为您的测试套件最大限度地减少所涉及的流程设置和拆卸成本,从而获得使用嵌入式数据库的好处。

【讨论】:

是的,没错,但在 Mongo 的情况下,设置/拆除成本可以忽略不计。在开发盒上,它总是在运行,所以在同一个实例中拥有另一个测试数据库是一个微不足道的成就。所以,我仍然很困惑嵌入式 mongo 是否是一个好主意

以上是关于使用 Embedded Mongo 或已安装的实例进行集成测试的主要内容,如果未能解决你的问题,请参考以下文章

使用mongo shake实现从一个单实例mongo往多个mongo单实例进行数据同步

使用mongo shake实现从一个单实例mongo往多个mongo单实例进行数据同步

mongo转换副本集

使用mongo shake实现单实例mongo之间的数据同步

使用mongo shake实现单实例mongo之间的数据同步

使用ycsb对mongo单实例做性能测试