在哪种情况下,我们要针对内存数据库而不是开发数据库进行测试?

时间:2020-03-06 14:40:20  来源:igfitidea点击:

何时针对内存数据库与开发数据库进行测试?

另外,作为一个相关的附带问题,当我们使用开发数据库时,是否使用单个开发数据库,​​集成开发数据库或者同时使用两者?

另外++,对于单元测试,何时使用内存数据库来模拟存储库/ DAL等?

解决方案

对于我的团队来说,它存储在开发人员机器上的内存中,而真实数据库则存储在连续集成服务器上。

对于给定的测试用例来说,数据很容易播种并且正在测试非常特殊的操作时,内存是单元测试的绝佳选择。真正的数据库更适合集成测试,因为准备工作更加复杂,并且在测试完成后保留基础数据是很有价值的。

对我们来说,我们的"快速" JUnit测试套件中唯一允许的是那些没有任何外部依赖项(数据库,文件,网络等)的套件,以便开发人员和开发人员都可以快速高效地运行套件。签到时持续集成。如果绝对需要对DB进行某种测试,那么唯一的方法就是使用内存。

请记住以下几点:

  • 如果我们需要在单元测试中完全使用数据库,请仔细考虑。这可能表明设计不佳,因为数据访问层与我们要测试的业务逻辑过于紧密地耦合在一起,无法被嘲笑。
  • 如果使用真实数据库进行集成测试,请确保测试完成后始终将数据还原为原始状态。我看到了很多浪费的时间和失败的集成测试,因为其他一些测试弄乱了数据。

至于其他问题,这实际上取决于需求。一个好的经验法则是每个代码分支有一个开发数据库,​​因为可能需要更改与另一代码分支无关的架构。仅拥有专用的开发数据库很重要;我对有多少开发团队必须与QA团队共享数据库等感到惊讶。能够在不会影响其他团队或者阻止其他团队开展工作的沙盒环境中进行更改非常重要,因此,如果我们已经满足了这些要求,并且做得很好。