你能解释一下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和Partialmock的区别吗?

本文将解释这些差异

如果您在StrictMock上没有创建期望,并且在mock上调用了一个方法,则将抛出异常。

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

还有一种叫做DynamicMock的东西。如果在DynamicMock上没有创建期望,并且在模拟上调用了一个方法,则调用了一个存根方法。如果有返回值,则返回默认值(例如null0)。

我相信GenerateMock创建了一个DynamicMock

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

查看本文:http://ayende.com/wiki/Rhino%20Mocks%203.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged

我还看到他说,从严格的模拟开始是有用的,一旦你对你的被测代码的行为感到满意,你的测试就会回到动态的模拟/存根。

我必须补充一句,按照Ayende的说法,"不鼓励使用严格Mock"。http://ayende.com/wiki/Rhino +模拟+ 3.5.ashx # CreateMockisdeprecated replacedbyStrictMockTheuseofStrictMockisdiscouraged

他说:

严格模拟将失败,如果没有预期的事情将发生给他们。从长远来看,这意味着对代码的任何更改测试可以中断您的测试,即使与更改无关你在这个特定的测试中实际测试的内容

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