代码之家  ›  专栏  ›  技术社区  ›  MatthewMartin muthu

单元测试的存根有什么问题?

  •  14
  • MatthewMartin muthu  · 技术社区  · 16 年前

    我只是看了这个有趣的节目 YouTube Video about unit testing (这是希特勒用假字幕斥责他的团队没有做好单元测试——如果你缺乏幽默感,就跳过它)在那里,存根受到了严厉的批评。但我不明白存根怎么了。

    我还没有开始使用mocking框架,也没有因为没有使用它而感到痛苦。

    我是否会在某个时候受到伤害, having chosen handwritten stubs and fakes instead of mocks (like Rhinomock etc)?

    在模拟存根和手写存根之间进行选择时需要考虑哪些因素?

    5 回复  |  直到 16 年前
        1
  •  13
  •   Glorfindel Doug L.    7 年前

    存根并没有什么问题,存根、模拟还有空间。。。还有间谍。所有这些都是“双重测试”,但目的不同,如中所述 Mocks and Stubs aren't Spies

    […]在继续之前,我想 在这里,我最初是在 杰拉德·梅萨罗斯 xUnit Patterns book

    • 但从未使用过。
    • 测试间谍提供了一种验证被测系统是否已执行的方法 正确的间接输出
    • 模拟对象为被测系统提供两个间接输入 以及验证间接输出的方法

    […]你可以让这个方便的图表 指导您的决策:

    alt text

    Mockito - The New Mock Framework on the Block 也值得一读。

        2
  •  9
  •   azheglov    16 年前

    被称为 如果你让它伪造一些东西,以防用这样或那样的参数调用一个方法。但如果你也验证了这样的呼叫确实发生了或者正好发生了N次,那么这样的假呼叫被称为a 嘲弄 . 简言之假文件是存根,除非对其调用Verify(),然后它是模拟文件。

    显然,在某些情况下需要使用存根,在其他情况下需要使用mock。因此,全面地批评存根可能是错误的,完全使用存根也可能是错误的。

    如果您还没有开始使用模拟框架(替代术语: 隔离框架 poll 显示他们使用什么的程序员。手动模拟/存根只占少数,但并不少见。

        3
  •  5
  •   Bill K    16 年前

    模仿只是简单得多。它们是类的真实实例,预先存根,能够用最少的样板覆盖任何方法的操作。

    当你把一门课删掉时,你会得到多少样本?如果你的课程是期末考试,你怎么处理?您是先在类路径上获取存根,还是使用不同的源代码?

    我建议从模拟开始——这更容易。

        4
  •  3
  •   TrueWill    16 年前

    使用存根而不是mock没有什么错。

    如果你想获得技术,mock是“智能”对象,它的期望值是可以验证的。存根是返回预设值的虚拟对象。看见 Mocks Aren't Stubs .

    但是许多人(包括我自己)更喜欢使用存根进行状态测试,而不是使用mock进行行为测试。将存根注入到被测试的类中,调用方法,然后检查被测试的类的状态。与断言类的内部称为参数为Y的模拟对象的方法X相比,它倾向于进行不那么脆弱的测试。

    我不认为你会受到伤害。如果您还没有开始感到痛苦,那么您可能还不需要隔离/模拟框架。如果你真的这样做了,在你周围有手写的存根/赝品不会有任何伤害。

    如果您有很多接口,或者如果您的接口有很多方法,那么隔离/模拟框架可以比手工编写存根节省大量时间。

    Moq 很多我发现它比Rhino Mock更容易用于创建存根。

        5
  •  0
  •   bloparod    16 年前

    我目前正在使用 MOQ 为了嘲弄和存根。