你能解释一下 StrictMock 和 Partialmock 之间的区别吗?

问题描述 投票:0回答:2

因为我使用的是 RhinoMocks 3.6 版本,并且我没有使用 Record-Replay,并且我没有调用验证方法来对模拟进行断言;

你能解释一下非常简单和非常简单有什么区别吗?

MockRepository.GenerateMock()
MockRepository.GeneratePartialMock()
MockRepository.GenerateStrictMock()

注意:我一直使用 .GenerateMock 来创建我的模拟,并且我已经通过提供参数期望来断言方法调用。

c# .net unit-testing rhino-mocks
2个回答
20
投票

这些差异在这些文章中进行了解释:

如果您对

StrictMock
没有创建期望,并且在模拟上调用方法,则会引发异常。

如果您对

PartialMock
没有创建任何期望,并且在模拟上调用方法,则不会发生任何特殊情况。 如果该模拟派生自基类,则调用会渗透到现有的基实现。

还有一种东西叫

DynamicMock
。 如果您没有对
DynamicMock
创建期望,并且在模拟上调用方法,则会调用存根方法。 如果有返回值,则返回默认值(例如
null
0
)。

GenerateMock
我相信创造了
DynamicMock

Ayende 选择此默认值是因为他建议仅使用

DynamicMock
Stub
的理想选择。
StrictMock
会创建脆弱的测试,并且通常违反了每个测试仅验证一种行为的概念。

另外,请参阅此存档文章:Ayende.com:Rhino Mocks 3.5:CreateMock 已弃用,由 StrictMock 取代。不鼓励使用 Strict Mock。

我还看到他说,从严格的模拟开始,一旦您对被测代码的行为感到满意,然后将测试返回到动态模拟/存根,这是很有用的。 不过没有链接:)


0
投票

我必须补充一点,Ayende 的话“不鼓励使用 Strict Mock”。 http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#CreateMock 已弃用,已替换为 StrictMock,不鼓励使用 StrictMock

他说:

如果发生意外的事情,严格的模拟将会失败 给他们。从长远来看,这意味着对以下代码的任何更改 测试可能会破坏您的测试,即使更改与以下内容无关 您在此特定测试中实际测试的内容。

我鼓励使用存根和动态模拟。

© www.soinside.com 2019 - 2024. All rights reserved.