你能解释一下StrictMock和Partialmock的区别吗?
本文关键字:Partialmock 区别 StrictMock 一下 能解释 | 更新日期: 2023-09-27 18:11:52
由于我使用的是RhinoMocks 3.6版本,并且我没有使用Record-Replay,也没有调用Verify方法来断言mock;
你能很简单地解释一下两者的区别吗?
MockRepository.GenerateMock()
MockRepository.GeneratePartialMock()
MockRepository.GenerateStrictMock()
注意:我一直使用. generatemock来创建我的模拟,并且我已经通过提供参数期望来断言方法调用。
本文将解释这些差异
如果您在StrictMock
上没有创建期望,并且在mock上调用了一个方法,则将抛出异常。
如果在PartialMock
上没有创建期望,并且在mock上调用方法,则不会发生任何特殊情况。如果该模拟派生自基类,则调用将渗透到现有的基类实现。
还有一种叫做DynamicMock
的东西。如果在DynamicMock
上没有创建期望,并且在模拟上调用了一个方法,则调用了一个存根方法。如果有返回值,则返回默认值(例如null
或0
)。
我相信GenerateMock
创建了一个DynamicMock
。
Ayende选择这个默认值是因为他建议只使用DynamicMock
和Stub
。StrictMock
创建了脆弱的测试,并且通常违反了每次测试只验证一个行为的概念。
查看本文:http://ayende.com/wiki/Rhino%20Mocks%203.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged
我还看到他说,从严格的模拟开始是有用的,一旦你对你的被测代码的行为感到满意,你的测试就会回到动态的模拟/存根。
我必须补充一句,按照Ayende的说法,"不鼓励使用严格Mock"。http://ayende.com/wiki/Rhino +模拟+ 3.5.ashx # CreateMockisdeprecated replacedbyStrictMockTheuseofStrictMockisdiscouraged
他说:
严格模拟将失败,如果没有预期的事情将发生给他们。从长远来看,这意味着对代码的任何更改测试可以中断您的测试,即使与更改无关你在这个特定的测试中实际测试的内容
我鼓励使用存根和动态模拟。