gpt4 book ai didi

testing - 模拟和 stub 之间有什么区别?

转载 作者:行者123 更新时间:2023-11-28 19:37:43 24 4
gpt4 key购买 nike

我读过各种关于测试中模拟与 stub 的文章,包括 Martin Fowler's Mocks Aren't Stubs , 但还是不明白其中的区别。

最佳答案

前言

有几种对象的定义,它们不是真实的。一般术语是测试替身。该术语包括:dummyfakestubmock

引用

根据 Martin Fowler's article :

  • Dummy objects are passed around but never actually used. Usually they are just used to fill parameter lists.
  • Fake objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an in memory database is a good example).
  • Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test. Stubs may also record information about calls, such as an email gateway stub that remembers the messages it 'sent', or maybe only how many messages it 'sent'.
  • Mocks are what we are talking about here: objects pre-programmed with expectations which form a specification of the calls they are expected to receive.

风格

模拟 vs stub = 行为测试 vs 状态测试

原则

根据Test only a thing per test的原则,一次测试中可能有多个stub,但一般只有一个mock。

生命周期

使用 stub 测试生命周期:

  1. 设置 - 准备要测试的对象及其 stub 协作者。
  2. 练习 - 测试功能。
  3. 验证状态 - 使用断言检查对象的状态。
  4. 拆解 - 清理资源。

使用模拟测试生命周期:

  1. 设置数据 - 准备要测试的对象。
  2. 设置期望 - 在主要对象使用的模拟中准备期望。
  3. 练习 - 测试功能。
  4. 验证预期 - 验证是否在 mock 中调用了正确的方法。
  5. 验证状态 - 使用断言检查对象的状态。
  6. 拆解 - 清理资源。

总结

模拟和 stub 测试都给出了以下问题的答案:结果是什么?

使用 mock 进行测试也对以下问题感兴趣:结果是如何实现的?

关于testing - 模拟和 stub 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3459287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com