'隔离框架'和'模拟框架'这两个术语有什么区别?
我认为被接受的答案是错误的,模拟框架也是隔离框架。
Roy Oshroves的书《单元测试的艺术》"第5.1节"中提到:
隔离框架是一组可编程的API,使创建模拟和存根对象更加容易。隔离框架可以使开发人员免于编写重复的代码来测试或模拟对象交互。
这个定义可能听起来有点平淡无奇,但它需要通用性,以包括各种隔离框架。大多数具有单元测试框架的语言都存在隔离框架。例如,C++有mockpp和其他框架,Java有jMock和EasyMock等。.NET有NMock、Moq、Typemock Isolator和Rhino Mocks等。
在他的博客文章中,他提到:
隔离框架(模拟框架...但这是一个可怕的名称。单词“mock”已经被重载了)
所以它们通常指的是同一件事情。隔离框架可以用于初始化模拟,但它也适用于其他测试替身。隔离框架将是 mock 框架所属的超集。
测试替身 是一个大伞术语,包括
这四种类型来自 Lasse Koskela 的书 Effective Unit Testing。Martin Fowler 和 Gerard Meszaros 列出五种类型:
但区别是相同的。
这两个术语经常被交替使用,但它们之间有一个重要的区别。在我看来,这就像是 stubs 和 mocks 之间的区别一样。 Stub 即 Isolation Framework 只提供预定义的输出,因此将“测试”与具有复杂内部状态、响应时间缓慢等外部系统隔离开来。 Mock 即 Mock Frameworks 不仅在需要时提供预定义的输出,而且还预先编程了期望,形成了它们所期望接收到的调用的规范。因此,如果不当使用 mock,则会跟踪其使用情况并失败“测试”。但 stub 只提供预定义的输出。
您可以在 Martin Fowler 的 Mocks Aren't Stubs 文章 中找到更多信息。