在哪些情况下,您是针对内存数据库而不是开发数据库进行测试的?

时间:2008-09-24 16:01:53

标签: database testing tdd mocking integration-testing

您何时针对In-Memory Database与开发数据库进行测试?

另外,作为一个相关的问题,当您使用开发数据库时,您是使用个人开发数据库,​​集成开发数据库还是两者兼而有之?

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

2 个答案:

答案 0 :(得分:7)

对于单元 - 测试,内存是一个很好的选择,当数据很容易为您的给定测试用例播种并且正在测试非常特定的操作时。真正的数据库更适合集成测试,其中数据先决条件更复杂,并且在测试完成后保留基础数据是有价值的。

对于我们来说,我们在JUnit测试的“快速”测试套件中允许的唯一内容是那些没有任何外部依赖关系(数据库,文件,网络等)的东西,以便通过快速有效的方式运行套件。开发人员和签入时的持续集成。如果某个测试绝对需要转到DB,那么内存中的一个是唯一的方法。

要记住几点:

  • 仔细考虑是否需要使用 数据库完全在单元测试中。它 可能表明设计不佳 因为数据访问层是 与业务联系过于紧密 你想要测试的逻辑和 不能被嘲笑。
  • 如果使用真实数据库进行集成测试,请确保测试始终在完成后将数据恢复到原始状态。我已经看到了大量的浪费时间和失败的集成测试,因为其他一些测试搞砸了数据。

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

答案 1 :(得分:2)

对于我的团队,它在开发者机器上是内存,在持续集成服务器上是真实数据库。