2010-11-12 88 views
3

我一直在思考学习存根和嘲笑,我知道的几个for .NET的可用库:RhinoMocks,起订量,TypeMock ......虽然我还没有太多清楚存根之间的区别,嘲笑,我知道它在那里,我总是可以谷歌。进入磕碰和嘲讽

我想知道,但是不为TDD或任何类似:

  • 是学习曲线,值得吗?我不太清楚所有关于期望的小细节,或者在这种情况下会得到什么回报。

  • 生产增益是否比手工制作“虚拟实现”大得多?我想是的,因为动态地嘲笑/保留一个类会更快。

  • 您推荐哪个库? Moq似乎更容易。

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

谢谢你的一切。

+1

答案是选项,这个问题应该是社区Wiki(恕我直言) – 2010-11-12 10:20:30

+1

使用正确的工具,学习曲线可以很容易。例如,在Java中使用mockito非常简单,需要大约10分钟的时间来学习。我相信你会为.Net(或几个)找到一个类似的库。顺便说一句,这个问题看起来像一个dup - 我确信它之前已经被问过。尝试搜索一下。 – ripper234 2010-11-12 10:22:25

+0

我没有足够的权限启动wiki帖子。关于搜索,好吧,我搜索了一下,看了一些其他的帖子,但他们都是旧的,或者没有在我想要的级别上覆盖我的问题,所以认为开始一个新问题并不是一个坏主意。 – Neverbirth 2010-11-12 10:29:32

回答

2

我一直在使用FakeItEasy了几个月的现在,它是伪造太神奇了!
我不能推荐它足够高。

+0

注意到了,我不知道它,虽然它已经在上个源代码提交后的一个月左右,它仍然活跃吗?我猜也是。 – Neverbirth 2010-11-12 10:31:09

+0

它仍然活跃,我还没有推一段时间。目前没有功能请求,所以我只有本地提交。 – 2010-11-13 20:23:43

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

  • 比手动模拟更好吗? - 不一定,在某些情况下手动嘲笑可能会更好。但IMO,嘲笑框架通常是以最少的代码完成任务的最快方式。尝试两种方法,你就会知道在特定情况下哪种方法最好。

  • 哪个库? - MoqRhino Mocks是最受欢迎的.Net according to this poll,它们都有很多功能并且易于使用。使用Rhino有两种模拟方式('记录&回放'和'AAA'模式) - 我只使用AAA模式。我认为 Moq只能像犀牛'AAA'模式一样工作,所以可能会稍微减少混淆。

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

在嘲笑&存根之间的差异方面,一个模拟可以记录这是怎么回事(被称为它例如什么方法),而存根不能。当你开始使用它们时你会发现更多。

+0

我预计NMock和JustMock会有更多的选票。我在一些示例中看到了Rhino的记录和回放调用,并且对它增加的复杂性如何是值得的有点困惑,无论如何,我实际上并不知道它们是如何工作的/他们实际做了什么,所以我不能评论它根本就没有。 – Neverbirth 2010-11-12 10:39:00

+0

是的,回放的东西是旧的方式(并且不允许你在单元测试中遵循'Arrange Act Assert'模式 - 又名AAA),我个人认为你可以忘记它。这就是为什么我认为Moq可能是一个更好的选择,因为它没有像Rhino那样的API调用的遗留问题,所以它应该更容易学习。 – 2010-11-12 10:49:00

0

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

该主页还包含一些很好的文档。总体而言,我认为这是一项有价值的工作,我会推荐它。

+1

我在Rhino Mocks看到的一个障碍是它的官方文档不是很好,是吗?当决定进一步了解它时,Rhino Mocks是我的第一个赌注。 – Neverbirth 2010-11-12 10:40:42

+0

是的,你是完全正确的:这是最大的障碍。无论如何,你可以通过互联网发现许多信息,即在这里stackoverflow你可以找到很多信息。 – Simone 2010-11-12 10:48:27

+0

这就是为什么我问学习的最佳资源,为什么我会谈论官方文档,在学习新内容时似乎是一个广泛的主题,我喜欢集中式资源,而不必通过多个站点查看信息最终过时,缺乏或没有遵循我目前的知识水平。 – Neverbirth 2010-11-12 11:46:22

0

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

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


关于嘲讽框架 - 这个问题has been asked before

我自己的偏好是使用两种方法。当我觉得使用框架更容易时,我会使用这个框架,并且使用vica - 有时候简单的假货已经足够并且更容易理解。不幸的是 - 直到你实际学习使用之前,你将无法自行判断。

Moq最近似乎是.Net领域最流行的嘲讽框架。我也在使用它。