10

术语“隔离框架”和“模拟框架”有什么区别?

4

2 回答 2

19

我觉得公认的答案是错误的,模拟框架也是隔离框架。

Roy Oshroves 书“单元测试的艺术”的第 5.1 节说

隔离框架是一组可编程的 API,可以更轻松地创建模拟和存根对象。隔离框架使开发人员无需编写重复代码来测试或模拟对象交互。

这个定义可能听起来有点乏味,但它需要是通用的,以便包含各种隔离框架。大多数语言都存在隔离框架,这些语言都有与之关联的单元测试框架。例如,C++ 有 mockpp 等框架,Java 有 jMock 和 EasyMock 等。.NET 有 NMock、Moq、Typemock Isolator 和 Rhino Mocks。

在他的博客文章中,他提到

隔离框架(模拟框架......但这是一个可怕的名字。模拟这个词已经重载)

所以他们通常指的是同一件事。隔离框架可用于启动模拟,但它也适用于其他测试替身。隔离框架将是模拟框架的一部分的超集。

测试替身是一个总称

  • 测试存根
  • 假物体
  • 测试间谍和
  • 模拟对象

这四种类型来自 Lasse Koskela 的《有效单元测试》一书。Martin Fowler 和 Gerard Meszaros列出了五种类型

  • 虚拟对象
  • 假物体
  • 存根
  • 间谍和
  • 嘲笑

但区别是一样的。

于 2014-04-20T11:07:58.753 回答
1

这两个术语经常互换使用,但有一个重要的区别。在我看来,存根模拟之间存在类似的区别。Stub ie Isolation Framework只提供预定义的输出,从而将“测试”与具有复杂内部状态、响应时间慢等的外部系统隔离开来。Mock ie Mock Frameworks不仅在需要时提供预定义的输出,而且还预先编程了期望形成他们期望接收的呼叫的规范。因此,mock 会跟踪其使用情况,如果使用不当,“测试”将失败。但是存根只提供预定义的输出。

您可以在Martin Fowler 的 Mocks Aren't Stubs 文章中找到更多信息

于 2013-01-08T12:00:44.583 回答