【问题标题】:An overview of unit testing terminology ( stub vs mock , integration vs. interaction )?单元测试术语的概述(存根与模拟,集成与交互)?
【发布时间】:2010-12-22 05:53:29
【问题描述】:

我在我的项目中使用了更多的单元测试,并阅读了我可以在线阅读的所有信息,并且对很多术语感到困惑。因此,我可能在对话和谷歌搜索中错误地使用了这些术语。

有人可以概述所有单元测试术语,例如“假”类型以及测试类型(交互与集成)吗?

【问题讨论】:

标签: unit-testing mocking


【解决方案1】:

来自 MSN 杂志的 article 解释了这些术语,并通过示例和一些源代码进行了一些详细说明。

基本上这些是测试替身:

  • Dummy - Dummy 不包含任何实现
  • 存根 - 存根是接口或基类的最小实现
  • Spy - 间谍会记录调用了哪些成员
  • 假的 - 更复杂,假的可能类似于生产实现
  • Mock - 模拟通常由模拟库动态创建,根据其配置,模拟可以表现得像假人、存根或间谍

【讨论】:

    【解决方案2】:

    我已阅读(并衷心推荐)Roy Osherove 的 The Art of Unit Testing。他使用了一套简化的术语。

    套用他的书...

    集成测试 - 任何超出当前进程或对象以与其他对象交互的测试

    交互测试 - 测试对象协同工作的方式

    状态测试 - 对操作产生的结果进行测试

    赝品 - 任何代替真实物品的替代品

    存根 - 一个替代对象,提供被测代码所需的依赖项

    Mock - 用于检查测试结果的替身

    请注意,这里的 Stub 和 Mocks 都可以由 Mocking 框架提供 - 区别在于它们的使用方式与所使用的技术一样。

    【讨论】:

      【解决方案3】:

      Fowler 在区分 Mocks and Stubs 方面当然做得很好,但对我来说,XUnit Test Patterns 这本书是参考,我建议查看 Mocks, Fakes, Stubs and Dummies 进行全面比较。

      是的,我知道,这很令人困惑,这就是为什么我建议检查Mocks and Stubs aren't Spies,然后检查let’s spy,最后检查Mockito - The New Mock Framework on the Block

      关于不同类型的测试,一个简单的解释可能是(这不是一个详尽的列表):

      • 单元测试:单独测试单个“单元”、方法
      • 集成测试:测试多个单元(方法、类、组件、层)的集成
      • 功能测试:测试端到端场景(从用户角度)

      所有这些类型都是有用的而不是排他的,它们实际上只是没有相同的意图。

      【讨论】:

        【解决方案4】:
        【解决方案5】:

        当谈到 mock 与 fake 与 stub 时,人们实际上有几种不同的解释方式。我一般借the meanings defined by Martin Fowler

        1. 存根对象提供有效响应,但它是静态的 - 无论您输入什么输入,您总是会得到相同的响应。
        2. 假对象的行为与真实对象相似,但它们以更简单的方式进行处理,例如使用地图而不是真实数据库来存储数据的 DAO。
        3. 模拟对象用于模拟测试用例——它们验证是否在这些对象上调用了某些方法。

        交互测试是一个通用术语,指的是确保对象之间的交互正确(确保调用预期的方法)的单元测试。这与状态(或经典)测试相反,它不关心方法中发生了什么,只要结果状态是正确的。我在上面链接的 Fowler 的文章中对这些类型的测试进行了比较。

        Integration testing 真的不是单元测试的一个方面,它是单元测试之上的一个层次。它需要不同的单元并验证它们是否可以正确地协同工作。

        【讨论】:

        • Test Doubles 的定义不是 Fowler 的 - 它们来自 Gerard Meszaros 的优秀著作“xUnit Test Patterns”,Fowler 坦率地承认这一点。
        猜你喜欢
        • 2013-09-25
        • 2014-03-29
        • 1970-01-01
        • 2017-06-19
        • 1970-01-01
        • 1970-01-01
        • 2016-05-05
        • 2010-09-21
        • 2019-05-09
        相关资源
        最近更新 更多