2011-10-20 40 views
7

由于我使用的是RhinoMocks 3.6版本,因为我没有使用Record-Replay,而且我也没有调用Verify方法来模拟嘲讽;你能解释StrictMock和Partialmock之间的区别吗?

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

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

注:我用.GenerateMock所有的时间来打造我的嘲笑,我主张通过已经提供了论据预期的方法调用。

回答

16

的差异是explained in this article

如果创建一个StrictMock没有希望和方法被调用的模拟,一个异常将被抛出。

如果您在PartialMock上没有创建任何期望,并且模拟方法被调用,则没有什么特别的事情发生。如果该模拟派生自基类,则该调用会流向现有的基础实现。

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

Ayende选择此默认值,因为他建议只使用DynamicMockStub的理想选择。 StrictMock会产生脆性测试,并且通常违反仅验证每个测试的一种行为的概念。

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

我也看到了他说,开始时使用严格的嘲笑是非常有用的,和工作的测试,回落到动态嘲笑/存根一旦你熟悉了如何代码不测试正在表现。没有链接的那个:)

0

我必须补充说,“使用严格模拟是不鼓励”的Ayende的话。 http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged

他说:如果事情没有被预期会发生 他们

严格的模拟考试将失败。从长远来看,这意味着对 测试下的代码进行的任何更改都可能会破坏您的测试,即使此更改与您在此特定测试中实际测试的 无关。

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

相关问题