26

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

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

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

编辑:我想 MS Mole 怎么样?

4

6 回答 6

22

在 JustMock 出现之前,有人问过这个问题,可以在这里找到答案。有一个非常好的Mocking 框架比较- 它还没有 JustMock,但您可以看到每个 .NET 模拟框架的语法和功能。

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

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

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

于 2010-04-14T13:45:29.903 回答
14

我最近从RhinoMocks切换到Moq

两者都具有相似的功能,但Moq具有更简洁的API

于 2010-04-14T14:23:46.200 回答
12

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

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

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

希望这可以帮助。

于 2010-04-14T14:43:45.817 回答
8

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

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

于 2010-04-14T16:36:39.060 回答
2

另请参阅:https ://stackoverflow.com/questions/37359/what-c​​-mocking-framework-to-use/2608634#2608634

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

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

于 2010-04-14T14:24:10.387 回答
1

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

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

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

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

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

于 2010-04-14T12:14:58.590 回答