术语“隔离框架”和“模拟框架”有什么区别?
2 回答
我觉得公认的答案是错误的,模拟框架也是隔离框架。
Roy Oshroves 书“单元测试的艺术”的第 5.1 节说
隔离框架是一组可编程的 API,可以更轻松地创建模拟和存根对象。隔离框架使开发人员无需编写重复代码来测试或模拟对象交互。
这个定义可能听起来有点乏味,但它需要是通用的,以便包含各种隔离框架。大多数语言都存在隔离框架,这些语言都有与之关联的单元测试框架。例如,C++ 有 mockpp 等框架,Java 有 jMock 和 EasyMock 等。.NET 有 NMock、Moq、Typemock Isolator 和 Rhino Mocks。
在他的博客文章中,他提到
隔离框架(模拟框架......但这是一个可怕的名字。模拟这个词已经重载)
所以他们通常指的是同一件事。隔离框架可用于启动模拟,但它也适用于其他测试替身。隔离框架将是模拟框架的一部分的超集。
测试替身是一个总称
- 测试存根
- 假物体
- 测试间谍和
- 模拟对象
这四种类型来自 Lasse Koskela 的《有效单元测试》一书。Martin Fowler 和 Gerard Meszaros列出了五种类型:
- 虚拟对象
- 假物体
- 存根
- 间谍和
- 嘲笑
但区别是一样的。
这两个术语经常互换使用,但有一个重要的区别。在我看来,存根和模拟之间存在类似的区别。Stub ie Isolation Framework只提供预定义的输出,从而将“测试”与具有复杂内部状态、响应时间慢等的外部系统隔离开来。Mock ie Mock Frameworks不仅在需要时提供预定义的输出,而且还预先编程了期望形成他们期望接收的呼叫的规范。因此,mock 会跟踪其使用情况,如果使用不当,“测试”将失败。但是存根只提供预定义的输出。