你能解释一下StrictMock和Partialmock之间的区别吗?

pen*_*ake 10 .net c# unit-testing rhino-mocks

因为我正在使用RhinoMocks版本3.6,因为我没有使用Record-Replay,因为我没有调用Verify方法来对模拟进行断言;

你能解释一下非常简单的区别吗?

MockRepository.GenerateMock()
MockRepository.GeneratePartialMock()
MockRepository.GenerateStrictMock()
Run Code Online (Sandbox Code Playgroud)

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

Mer*_*ham 18

本文介绍这些差异

如果你没有对a创建期望StrictMock,并且在mock上调用了一个方法,则会抛出异常.

如果你没有对a创建期望PartialMock,并且在mock上调用了一个方法,则不会发生任何特殊情况.如果该mock来自基类,则调用将渗透到现有的基本实现.

还有一种叫做a的东西DynamicMock.如果你没有对a创建期望DynamicMock,并且在mock上调用了一个方法,则会调用一个stub方法.如果存在返回值,则返回默认值(例如null0).

GenerateMock我相信创造了一个DynamicMock.

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

请参阅此文章:http://ayende.com/wiki/Rhino%20Mocks%203.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged

我也看到他说从严格的模拟开始是有用的,一旦你对你的测试代码的行为感到满意,就可以将你的测试工作回到动态模拟/存根.那个没有链接:)