因为我正在使用RhinoMocks版本3.6,因为我没有使用Record-Replay,因为我没有调用Verify方法来对模拟进行断言;
你能解释一下非常简单的区别吗?
MockRepository.GenerateMock()
MockRepository.GeneratePartialMock()
MockRepository.GenerateStrictMock()
注意:我一直使用.GenerateMock创建我的模拟,并通过提供参数期望来断言方法调用。
答案 0 :(得分:18)
如果你对StrictMock
没有期望,并且在模拟上调用了一个方法,则会抛出异常。
如果你对PartialMock
没有任何期望,并且在模拟上调用了一个方法,则不会发生任何特殊情况。如果该模拟派生自基类,则调用将渗透到现有的基本实现。
还有一种叫做DynamicMock
的东西。如果你对DynamicMock
没有期望,并且在mock上调用了一个方法,则调用一个stub方法。如果有返回值,则会返回默认值(例如null
或0
)。
GenerateMock
我相信会创建DynamicMock
。
Ayende选择此默认设置是因为他建议仅使用DynamicMock
和Stub
。 StrictMock
会产生脆弱的测试,并且通常违反了每次测试只验证一种行为的概念。
我也看到他说从严格的模拟开始是有用的,一旦你对你的测试代码的行为感到满意,就可以将你的测试恢复到动态模拟/存根。没有链接的那个:)
答案 1 :(得分:0)
我必须补充一点,“用Ayende的话来阻止使用Strict Mock”。 http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged
他说:
如果不期望的事情发生,严格的模拟将失败 给他们。从长远来看,这意味着对代码的任何更改 即使更改与测试无关,测试也可能会破坏您的测试 你在这个特定的测试中实际测试的是什么。
我鼓励使用存根和动态模拟。