因为我使用的是 RhinoMocks 3.6 版本,并且我没有使用 Record-Replay,并且我没有调用验证方法来对模拟进行断言;
你能解释一下非常简单和非常简单有什么区别吗?
MockRepository.GenerateMock()
MockRepository.GeneratePartialMock()
MockRepository.GenerateStrictMock()
注意:我一直使用 .GenerateMock 来创建我的模拟,并且我已经通过提供参数期望来断言方法调用。
这些差异在这些文章中进行了解释:
如果您对
StrictMock
没有创建期望,并且在模拟上调用方法,则会引发异常。
如果您对
PartialMock
没有创建任何期望,并且在模拟上调用方法,则不会发生任何特殊情况。 如果该模拟派生自基类,则调用会渗透到现有的基实现。
还有一种东西叫
DynamicMock
。 如果您没有对 DynamicMock
创建期望,并且在模拟上调用方法,则会调用存根方法。 如果有返回值,则返回默认值(例如 null
或 0
)。
GenerateMock
我相信创造了DynamicMock
。
Ayende 选择此默认值是因为他建议仅使用
DynamicMock
和 Stub
的理想选择。 StrictMock
会创建脆弱的测试,并且通常违反了每个测试仅验证一种行为的概念。
另外,请参阅此存档文章:Ayende.com:Rhino Mocks 3.5:CreateMock 已弃用,由 StrictMock 取代。不鼓励使用 Strict Mock。
我还看到他说,从严格的模拟开始,一旦您对被测代码的行为感到满意,然后将测试返回到动态模拟/存根,这是很有用的。 不过没有链接:)
我必须补充一点,Ayende 的话“不鼓励使用 Strict Mock”。 http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#CreateMock 已弃用,已替换为 StrictMock,不鼓励使用 StrictMock
他说:
如果发生意外的事情,严格的模拟将会失败 给他们。从长远来看,这意味着对以下代码的任何更改 测试可能会破坏您的测试,即使更改与以下内容无关 您在此特定测试中实际测试的内容。
我鼓励使用存根和动态模拟。