代码之家  ›  专栏  ›  技术社区  ›  John Farrell

单元测试术语概述(存根与模拟、集成与交互)?

  •  31
  • John Farrell  · 技术社区  · 16 年前

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

    5 回复  |  直到 12 年前
        1
  •  53
  •   Kaleb Brasee    16 年前

    当谈到模仿、假货和存根时,人们实际上有几种不同的解释方式。我通常借 the meanings defined by Martin Fowler :

    1. 存根对象提供了一个有效的响应,但它是静态的——无论您传入什么输入,都会得到相同的响应。
    2. 伪对象的行为类似于真实对象,但它们以一种更简单的方式进行操作——例如使用映射而不是真实数据库来存储数据的DAO。
    3. 模拟对象用于模拟测试用例——它们验证对这些对象调用了某些方法。

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

    Integration testing 实际上,这不是单元测试的一个方面,而是单元测试之上的一个层次。它采用不同的单元,并验证它们是否正确地协同工作。

        2
  •  12
  •   svengali_no    14 年前

    article MSN杂志解释了这些术语,并用示例和一些源代码详细介绍了这些术语。

    基本上,这些是测试双打:

    • 笨蛋 -假人不包含任何实现
    • -存根是接口或基类的最小实现
    • 间谍 -间谍将记录调用的成员
    • 伪造的 -更复杂的是,伪代码可能类似于生产实现
    • 嘲弄
        3
  •  6
  •   Pascal Thivent    16 年前

    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
  •   Bevan    16 年前

    我读过(并衷心推荐) The Art of Unit Testing 罗伊·奥舍洛夫。他使用了一套简化的术语。

    解释一下他的书。。。

    集成测试

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

    -对手术结果的检验

    伪造的 -任何替代真实物体的替代品

    树桩 -提供被测代码所需依赖项的替代对象

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

    请注意,这里存根和模拟都可以由模拟框架提供——区别在于如何使用它们以及所使用的技术。