【问题标题】:Rhino mock vs Typemock vs JustMock vs [closed]Rhino mock vs Typemock vs JustMock vs [关闭]
【发布时间】:2011-02-07 21:17:24
【问题描述】:

我需要为新项目选择模拟框架。

这些框架的优缺点是什么? 有对照表吗?

我知道 JustMock 处于 beta 阶段,但它现在看起来非常好(非常类似于 TypeMock)

编辑:我想 MS Mole 怎么样?

【问题讨论】:

  • 不要忘记最小起订量。这是我最喜欢的。
  • 起订量是我用过的最好的。也促进了良好、干净的可测试代码。 stackoverflow.com/questions/64242/…
  • 还有 FakeItEasy,它提供像 Rhino 一样的自然伪造/存根/模拟,但语法更简洁,配置更好的上下文 dsl。 code.google.com/p/fakeiteasy

标签: moq rhino-mocks typemock justmock


【解决方案1】:

在 JustMock 出现之前,有人问过这个问题,answers can be found here。 有一个很好的 Mocking framework comparison - 它还没有 JustMock,但您可以看到每个 .NET 模拟框架的语法和功能。

RhinoMocks(和 Moq)都是开源免费项目,可以通过继承类型来创建假对象——这意味着它们不能假冒静态方法,结构和密封类。

Typemock Isolator 使用 CLR 分析器拦截 .NET 调用并在运行时更改它们,并且几乎可以伪造任何东西。 Typemock 还可以伪造您无法从测试中“访问”的对象,因为它们是在生产代码中实例化的。 有人称其为“黑魔法”,但其他人则认为伪造几乎任何东西(包括第三方库和遗留代码)的能力都是必须的。

JustMock 是一个新玩家,目前仅处于 Beta 版 - 它有一些 Typemock Isolator 并且可以在没有分析器 API 的情况下运行 - 在这种模式下,它就像 RhinoMocks 一样。 尚未发现它真正具有多少 Typemock Isolator 功能。目前看来,这是一个朝着正确方向迈进的良好开端,但距离成为一个有效的选择还有一段距离。

【讨论】:

  • 起订量可用于存根、假货和 MOCK 对象。
  • 所有的模拟框架都可以做到这一点——问题是哪些对象
  • JustMock 和 TypeMock 附带价格标签,值得一提。
【解决方案2】:

我最近从 RhinoMocks 切换到 Moq

两者具有相似的功能,但 Moq 有很多更清洁的 API

【讨论】:

    【解决方案3】:

    [免责声明 - 我在 Telerik 工作]

    关于 JustMock 的几点说明。它的 API 比 RhinoMocks 更类似于 Moq 的 API,所以如果你熟悉 Moq,那么学习 JustMock 应该不会有问题。 例如,我们在 JustMock 中试图做得更好的是在模拟顺序调用时有一个更好的故事。 此外,正如有人已经提到的,JustMock 可以使用相同的类似 Moq 的语法来模拟静态类和方法/属性、密封类、非虚拟方法和属性等。 也感谢 JustMock 中的这一点,可以进行部分模拟。

    顺便说一句,如果您直接引用 Telerik.CodeWeaver.Hook 程序集,那么在使用 JustMock 时,Dror 提到的“黑魔法”也是可能的,但不幸的是,目前尚未记录。 如果有人想这样做,他可以开一张支持票,我们很乐意提供帮助。

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      还可以查看Microsoft Moles,这是一个 .NET 隔离框架,允许用自定义委托替换任何 .NET 方法。

      Moles 有一个可用于商业项目的版本,并在 Visual Studio 2008 和 2010 中受支持。

      【讨论】:

      • 代码和所有基于 xml 的代码都很难看...GROSS。
      【解决方案5】:

      另见:https://stackoverflow.com/questions/37359/what-c-mocking-framework-to-use/2608634#2608634

      我目前在 Moq 进行单元测试,我必须说它运行良好! - 改写:效果很好!我没有使用你提到的任何其他模拟框架,所以我无法给你一个比较。但我可以说我很高兴我选择了 Moq 作为我第一个尝试的模拟框架。 lamda 表达式非常好,而且非常轻量级且易于阅读(大多数其他模拟框架中的记录/重放语法并没有真正提高您的可读性)

      除此之外(这有点跑题了)我将在不久的将来将 Ninject 用作​​ IoC 容器,并且这两个框架是齐头并进的。 Ninject 也有 Lamda,它甚至为 Moq 提供自动模拟容器支持(使用扩展)。因此,如果您还计划使用 IoC 容器,您可以查看这个很棒的组合:]

      【讨论】:

        【解决方案6】:

        我不会告诉你哪个是最好的,因为每个都有其优点和缺点。我一直使用 Rhino Mocks,因为它是免费的,而且周围有一个很棒的社区,很容易找到任何帮助。

        TypeMock 不是免费的(我猜)。但是,如果您想使用私有或静态类型和成员测试遗留代码,那么 TypeMock 非常棒。其他模拟框架做不到。一个缺点是它不会强迫您编写可测试的代码,而这些代码除了可测试性之外还有其他好处。

        我不知道 JustMock,所以无法告诉你它是如何工作的。

        我建议您尝试所有这些并选择一个您觉得舒服的。但是,如果您需要测试遗留代码,请选择 TypeMock。

        希望其他人能给你更多的细节。

        【讨论】:

          猜你喜欢
          • 2011-03-20
          • 2011-08-10
          • 1970-01-01
          • 1970-01-01
          • 2010-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-20
          相关资源
          最近更新 更多