隔离框架与模拟框架的区别

时间:2013-01-06 14:44:28

标签: unit-testing frameworks mocking

术语“隔离框架”和“模拟框架”之间的区别是什么?

2 个答案:

答案 0 :(得分:17)

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

Roy Oshroves的第5.1节书"The Art of Unit Testing"

  

隔离框架是一组可编程的API   创建模拟和存根对象更容易。隔离框架保存   开发人员需要编写重复的代码来测试或   模拟对象交互。

     

这个定义可能听起来有点乏味,但它必须是通用的   为了包括各种隔离框架。隔离   大多数具有单元测试框架的语言都存在框架   与他们相关联。例如,C ++有mockpp和其他   框架,Java有jMock和EasyMock等。 .NET有   NMock,Moq,Typemock Isolator和Rhino Mocks。

blog post by him他提到

  

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

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

test double

的总称
  • 测试存根
  • 假物品
  • 测试间谍和
  • 模拟对象

这四种类型来自Lasse Koskela,书籍Effective Unit Testing。 Martin Fowler和Gerard Meszaros list five types

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

但区别是相同的。

答案 1 :(得分:1)

这两个术语经常互换使用,但有一个重要的区别。在我看来, stubs mocks 之间存在类似的差异。 Stub 隔离框架仅提供预定义的输出,从而将“测试”与具有复杂内部状态,慢响应时间等的外部系统隔离开来。 Mock 模拟框架不仅提供了预定义的输出(如果需要),而且还预先编程了预期,这些期望构成了预期接收的呼叫规范。因此,mock会跟踪其使用情况,如果使用不当,则无法“测试”。但是stub只提供预定义的输出。

您可以在Mocks Aren't Stubs article by Martin Fowler

找到更多内容