因为我使用的是 RhinoMocks 3.6 版并且我没有使用 Record-Replay 并且我没有调用验证方法来断言模拟;
你能很简单地解释一下两者的区别吗?
MockRepository.GenerateMock()
MockRepository.GeneratePartialMock()
MockRepository.GenerateStrictMock()
注意:我一直使用 .GenerateMock 来创建我的模拟,并且我已经通过提供参数期望来断言方法调用。
最佳答案
差异是 explained in this article
如果您对 StrictMock
没有创建任何期望,并且在模拟上调用了一个方法,则会引发异常。
如果您对 PartialMock
没有创建任何期望,并且在模拟上调用了一个方法,则不会发生任何特殊情况。如果该模拟派生自基类,则调用会渗透到现有的基类实现。
还有一个叫做 DynamicMock
的东西。如果您对 DynamicMock
没有创建任何期望,并且在模拟上调用了一个方法,则会调用一个 stub 方法。如果有返回值,则返回默认值(例如 null
或 0
)。GenerateMock
我相信会创建一个 DynamicMock
。
Ayende 选择这个默认值是因为他建议只使用 DynamicMock
和 Stub
的理想情况。 StrictMock
创建了脆弱的测试,并且通常违反了每个测试只验证一个行为的概念。
看这篇文章:http://ayende.com/wiki/Rhino%20Mocks%203.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged
我还看到他说从严格的模拟开始是很有用的,一旦你对你的被测代码的行为感到满意,你的测试就会回到动态模拟/ stub 。没有那个链接 :)
关于c# - 你能解释一下 StrictMock 和 Partialmock 之间的区别吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7831404/