代码之家  ›  专栏  ›  技术社区  ›  John_

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

  •  9
  • John_  · 技术社区  · 17 年前

    在家开发时,我一直在努力推动我的思维,使其更倾向于TDD和DDD。

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

    那么,有人能告诉我为什么有些人喜欢测试假存储库吗?我本以为用真实数据库进行测试比创建虚假数据库要好得多,因为这样你就知道它对你的真实世界数据存储有效。

    3 回复  |  直到 17 年前
        1
  •  21
  •   Giraffe    17 年前

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

    伪存储库意味着自动测试可以很容易地在存储库中设置已知状态。

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

    虚假存储库不能替代包括数据库在内的系统测试。

        2
  •  7
  •   Spoike Otávio Décio    17 年前

    在我看来,你测试伪造资源有两个很大的原因:

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

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

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

    …这就是 集成测试 是为了。

        3
  •  2
  •   joel.neely    17 年前

    我支持长颈鹿的回答,但只想补充几点:

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

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

    作为一个例子,我使用了像 HashMap 以实现数据访问层的模拟。这使它 极其 易于进行每个单元测试,以确保其目的确实存在必要的条件,并验证在数据访问层上进行了正确的调用。