5

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

另外,作为一个相关的附带问题,当您使用开发数据库时,您是使用个人开发数据库、集成开发数据库还是两者都使用?

此外 ++,对于单元测试,您何时使用内存数据库而不是模拟您的存储库/DAL 等?

4

2 回答 2

7

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

对我们来说,我们在 JUnit 测试的“快速”测试套件中唯一允许的东西是那些没有任何外部依赖项(数据库、文件、网络等)的东西,这样开发人员和开发人员都可以快速有效地运行该套件。签入时的持续集成。如果有某个测试绝对需要去数据库,那么内存中的测试是唯一的方法。

要记住几点:

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

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

于 2008-09-24T16:24:42.900 回答
2

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

于 2008-09-24T16:04:40.610 回答