使用嵌入式MongoDB正确完成集成测试

本文探讨了为什么内存数据库不适用于集成测试,尤其是对于需要验证真实数据库行为的情况。作者推荐使用嵌入式MongoDB进行集成测试,因为它能创建与生产环境相似的临时数据库,确保代码在真实数据库上的运行效果。通过使用embedmongo-maven-plugin,可以在测试套件生命周期内启动和停止MongoDB,提供更好的测试隔离。
摘要由CSDN通过智能技术生成

介绍

单元测试需要将各个组件与其依赖项隔离开。 依赖被替换为嘲笑 ,这模拟某些使用情况。 这样,我们可以跨各种外部上下文场景验证测试中组件的行为。

可以使用模拟业务逻辑服务对Web组件进行单元测试。 可以针对模拟数据访问存储库对服务进行测试。 但是数据访问层不是单元测试的理想选择 ,因为数据库语句需要针对实际运行的数据库系统进行验证。

集成测试数据库选项

理想情况下,我们的测试应针对类似生产的数据库。 但是使用专用的数据库服务器是不可行的,因为我们很可能有多个开发人员来运行这种集成测试套件。 为了隔离并发测试运行,每个开发人员都需要一个专用的数据库目录。 添加连续集成工具会使情况变得更糟,因为必须并行运行更多测试。

第1课:我们需要一个分叉的测试套件绑定数据库

运行测试套件时,必须启动数据库,并且该数据库仅可用于该特定的测试套件实例。 基本上,我们有以下选择:

  • 内存嵌入式数据库
  • 临时产生的数据库进程

内存数据库测试的谬误

Java提供了多个内存中关系数据库选项供您选择:

嵌入内存数据库的速度很快,每个JVM都可以运行它自己的隔离数据库。 但是,我们不再针对实际的生产型数据库引擎进行测试,因为我们的集成测试将验证非生产型数据库系统的应用程序行为。

使用ORM工具可能会产生错误的印象,即所有数据库都是相等的,尤其是当所有生成的SQL代码都符合SQL-92时

对ORM工具数据库支持的好处可能会使您无法使用数据库特定的查询功能( 窗口函数通用表表达式PIVOT )。

因此,集成测试内存数据库可能不支持此类高级查询。 这可能会导致代码覆盖率降低或促使开发人员仅使用常见的有限的SQL查询功能。

即使您的生产数据库引擎提供了内存中的变体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值