3

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

我想知道,而不是进入 TDD 或类似的东西:

  • 学习曲线值得吗?我不太确定是否了解有关期望的所有小细节或在这种情况下会得到回报的任何东西。

  • 生产收益是否比手动制作我的“虚拟实现”大得多?我猜是这样,因为动态模拟/存根一个类更快。

  • 你会推荐哪个图书馆?起订量似乎更容易。

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

感谢一切。

4

4 回答 4

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

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

  • 哪个图书馆?-根据本次民意调查, MoqRhino Mocks是 .Net 中最受欢迎的,两者都具有丰富的功能且易于使用。使用 Rhino 有两种模拟方式(“录制和播放”和“AAA”模式)——我只使用 AAA 模式。我认为Moq 只像 Rhino 'AAA' 模式那样工作,所以这可能会稍微不那么令人困惑。

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

就模拟和存根之间的区别而言,模拟可以记录发生在它身上的事情(例如,在它上面调用了哪些方法),而存根不能。当您开始使用它们时,您会发现更多。

于 2010-11-12T10:22:10.710 回答
2

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

于 2010-11-12T10:20:00.917 回答
0

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

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


关于模拟框架 - 这个问题之前已经被问过

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

Moq 最近似乎是 .Net 空间中最流行的模拟框架。我也在用它。

于 2010-11-12T13:24:00.527 回答
0

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

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

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

于 2010-11-12T10:23:00.337 回答