测试假存储库有什么意义?

时间:2009-01-02 12:59:40

标签: tdd repository fake-repositories

我一直试图在家中开发时更加注重TDD和DDD。

我不明白的一件事是你为什么要创建一个假的存储库来测试?我还没有真正研究过,但测试的想法肯定是为了帮助解耦你的代码(提供更多的灵活性),减少所需的代码并减少错误的数量。

有人可以填写我的愚蠢大脑,为什么有些人喜欢测试假存储库?我认为对真实数据库进行测试是创建假数据库的一个更好的选择,因为那时你知道它对你的真实世界数据存储有效。

3 个答案:

答案 0 :(得分:21)

假存储库允许您仅测试应用程序代码。

假存储库意味着自动化测试可以轻松地在存储库中设置已知状态。

假存储库将比真实数据库快几个数量级。

假存储库不能替代包含数据库的系统测试。

答案 1 :(得分:7)

正如我所看到的那样,为什么要对伪造的资源进行测试有两个非常重要的原因:

  • 当您对慢速I / O或数据库进行模拟时,它会使单元测试更快。如果您有一个小型测试套件,这可能看起来不像什么,但是当您进行+500单元测试时,它开始有所作为。在这样的数量下,针对数据库运行的测试将开始需要几秒钟的时间。程序员很懒,想让事情变得更快,所以如果运行测试套件的时间超过10秒,那么你就不再乐意做TDD了。
  • 它强制您考虑您的代码设计,以便更改。如果您已经针对接口或抽象类进行了实现,那么通过契约和依赖注入进行设计也变得更加容易。如果做得好,这样的设计可以更容易地遵守代码中的更改。

唯一的缺点是显而易见的:

  • 你怎么能确定它真的有效?

......这就是集成测试的用途。

答案 2 :(得分:2)

我赞成了长颈鹿的回答,但想补充几点:

  • 每个开发人员都可以使用模拟/假冒 她/他自己的单位的存储库 测试不干扰 测试由其他开发人员完成 在同一个项目上。

  • 使用本地模拟/假存储库 强化数据的用户 抽象层,这很好 设计实践。

作为一个例子,我使用了像HashMap这样简单的东西来实现数据访问层的模拟。这使得每个单元测试的极其变得容易,以确保为其目的存在确切的必要条件,并验证是否在数据访问层上进行了正确的调用。