【问题标题】:What's the point of testing fake repositories?测试假存储库有什么意义?
【发布时间】:2010-09-29 05:38:56
【问题描述】:

当我在家发展时,我一直在努力推动自己的心态,使其更倾向于 TDD 和一点 DDD。

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

那么有人能解释一下我愚蠢的大脑为什么有些人喜欢测试假存储库吗?我原以为针对真实数据库进行测试是比创建虚假数据库更好的替代方法,因为这样您就知道它可以针对您的真实数据存储。

【问题讨论】:

  • 我也看不出任何原因,设置数据库实例并用于开发很容易。
  • 您询问有关测试假存储库和测试反对假存储库的问题。我认为您的意思是反对,但您能否澄清问题以便人们提供更有针对性的答案?

标签: tdd repository fake-repositories


【解决方案1】:

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

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

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

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

【讨论】:

  • 所以为了添加和更新项目以通过测试而创建一个假存储库是没有意义的?它应该只用于测试您的应用程序代码吗?如果这是正确的,我会用接受的答案更新它。
【解决方案2】:

在我看来,您要针对伪造的资源进行测试有两个非常重要的原因:

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

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

  • 如何确定它确实有效?

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

【讨论】:

    【解决方案3】:

    我赞成 Giraffe 的回答,但只想补充几点:

    • 每个开发人员都可以使用 mock/fake 她/他自己单位的存储库 在不干扰的情况下进行测试 其他开发人员正在进行的测试 在同一个项目上。

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

    例如,我使用了像HashMap 这样简单的东西来实现数据访问层的模拟。这使得每个单元测试非常很容易确保其目的确切地存在必要的条件,并验证在数据访问层上进行了正确的调用。

    【讨论】:

      猜你喜欢
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2011-08-03
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多