您何时针对内存数据库与开发数据库进行测试?
另外,作为一个相关的问题,当您使用开发数据库时,您是使用个人开发数据库,集成开发数据库还是两者兼而有之?
还有++,对于单元测试,你什么时候使用内存数据库而不是模拟你的Repository/DAL等?
对于您的单元测试,内存是一个很好的选择,当您的数据很容易为您的给定测试用例播种并且正在测试非常特定的操作时.真正的数据库更适合集成测试,其中数据先决条件更复杂,并且在测试完成后保留基础数据是有价值的.
对于我们来说,我们在JUnit测试的"快速"测试套件中允许的唯一内容是那些没有任何外部依赖关系(数据库,文件,网络等)的东西,这样开发人员可以快速有效地运行套件.签入时持续集成.如果某个测试绝对需要转到DB,那么内存中的一个是唯一的方法.
有几点要记住:
如果您需要在单元测试中使用数据库,请仔细考虑.这可能表明设计不佳,因为数据访问层与您尝试测试的业务逻辑耦合得太紧,无法模拟出来.
如果使用真实数据库进行集成测试,请确保测试始终在完成后将数据恢复到原始状态.我已经看到了大量的浪费时间和失败的集成测试,因为其他一些测试搞砸了数据.
至于你的其他问题,这实际上取决于你的需要.一个好的经验法则是每个代码分支一个开发数据库,因为可能需要与另一个代码分支无关的模式更改.只是有一个专门的数据库的发展是很重要的; 我很惊讶有多少开发团队必须与QA团队共享数据库等.能够在沙盒环境中进行更改而不影响其他团队或阻止其他团队开展工作非常重要,所以如果你已经满足了那些你做得很好的要求.