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

你能很简单地解释一下两者的区别吗?

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

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

最佳答案

差异是 explained in this article

如果您对 StrictMock 没有创建任何期望,并且在模拟上调用了一个方法,则会引发异常。

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

还有一个叫做 DynamicMock 的东西。如果您对 DynamicMock 没有创建任何期望,并且在模拟上调用了一个方法,则会调用一个 stub 方法。如果有返回值,则返回默认值(例如 null0 )。
GenerateMock 我相信会创建一个 DynamicMock

Ayende 选择这个默认值是因为他建议只使用 DynamicMockStub 的理想情况。 StrictMock 创建了脆弱的测试,并且通常违反了每个测试只验证一个行为的概念。

看这篇文章:http://ayende.com/wiki/Rhino%20Mocks%203.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged

我还看到他说从严格的模拟开始是很有用的,一旦你对你的被测代码的行为感到满意,你的测试就会回到动态模拟/ stub 。没有那个链接 :)

关于c# - 你能解释一下 StrictMock 和 Partialmock 之间的区别吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7831404/

10-17 02:52