【问题标题】:Can you explain difference between StrictMock and Partialmock?您能解释一下 StrictMock 和 Partialmock 之间的区别吗?
【发布时间】:2011-12-11 11:56:08
【问题描述】:

因为我使用的是 RhinoMocks 3.6 版,并且因为我没有使用 Record-Replay,并且我没有调用验证方法来断言模拟;

你能解释一下非常简单和有什么区别吗?

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

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

【问题讨论】:

    标签: c# .net unit-testing rhino-mocks


    【解决方案1】:

    区别是explained in this article

    如果您对 StrictMock 没有创建任何期望,并且在 mock 上调用了一个方法,则会引发异常。

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

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

    GenerateMock 我相信会创建一个DynamicMock

    Ayende 之所以选择此默认设置,是因为他建议仅使用DynamicMockStubStrictMock 创建脆弱的测试,通常违反每次测试仅验证一种行为的概念。

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

    我还看到他说,从严格的模拟开始很有用,一旦您对被测代码的行为方式感到满意,就可以将您的测试返回到动态模拟/存根。没有那个链接:)

    【讨论】:

      【解决方案2】:

      我必须用 Ayende 的话补充一下“不鼓励使用 Strict Mock”。 http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged

      他说:

      如果发生意想不到的事情,严格的模拟将失败 给他们。从长远来看,这意味着对以下代码的任何更改 测试可以破坏你的测试,即使改变与 您在此特定测试中实际测试的内容。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-09
        • 2019-05-13
        • 2012-09-22
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多