进入存根和嘲弄

时间:2010-11-12 10:12:11

标签: .net unit-testing mocking stubbing

我一直在考虑学习存根和模拟,我知道.Net的几个可用库:RhinoMocks,Moq,TypeMock ......虽然我仍然不太清楚存根之间的区别和嘲笑,我知道它就在那里,我总是可以谷歌。

我想知道,没有进入TDD或类似的东西:

  • 学习曲线值得吗?我不太清楚在这种情况下学习所有关于期望的细节或任何可以回报的细节。

  • 生产收益是否比手工制作“虚拟实施”更大?我想是的,因为动态地嘲弄/抄写一个类更快。

  • 您会推荐哪个图书馆? Moq似乎更容易。

  • 哪些是傻瓜的最佳资源(教程,书籍,视频...),或多或少是最新的?我不想了解一个库,当我下载上一个版本时,意识到显示的大部分API都不再有效。

感谢您的一切。

4 个答案:

答案 0 :(得分:5)

  • 学习曲线值得吗? - 是的,这并不难。一旦您知道如何使用模拟框架,您将在单元测试中节省大量时间。

  • 比手动嘲笑更好? - 不一定,在某些情况下,手动模拟可能会更好。但IMO,模拟框架通常是用最少的代码完成任务的最快方法。尝试这两种方法,您将了解哪种方法在特定情况下最佳。

  • 哪个图书馆? - MoqRhino Mocks是.Net according to this poll中最受欢迎的,并且都具有丰富的功能且易于使用。使用Rhino有两种模拟方式('记录和播放'和'AAA'模式) - 我只使用AAA模式。我认为 Moq只能像Rhino'AAA'模式一样工作,所以可能会稍微有些混乱。

  • 不确定具体的资源,只需选择一个工具并谷歌搜索,你会发现很多。

就模拟与模拟之间的差异而言存根,模拟可以记录发生了什么(例如,在它上面调用了什么方法),而存根不能。当你开始使用它们时,你会发现更多。

答案 1 :(得分:2)

我已经使用FakeItEasy几个月了,这真是假装! 我不能高度推荐它。

答案 2 :(得分:0)

我实际上使用RhinoMocks,虽然学习曲线非常痛苦,但现在我对结果非常满意。无论如何,它需要(或者,至少,它花了我,但也许我有点愚蠢:))一段时间之前你比手动制作虚拟实现更快。我从未使用过你提到的任何其他库,所以我无法对它们进行比较。

主页还包含一些很好的文档。

总的来说,我认为这是值得的,我会推荐它。

答案 3 :(得分:0)

存根 - 模仿“真实”对象行为的虚假对象,负责保持测试可运行。

模拟 - 用于在测试通过时断言的存根。


关于模拟框架 - 这个问题has been asked before

我自己的偏好是使用这两种方法。当我觉得使用框架更容易时,我会使用它,反之亦然 - 有时简单的假货足够且更容易理解。不幸的是 - 在你真正学会使用之前,你将无法自己判断。

最近Moq似乎是.Net领域最热门的模拟框架。我也在使用它。