Rhino Mock、Typemock、JustMock之间的比较

26
我需要选择一个新项目的模拟框架。
这些框架有哪些优缺点?是否有比较表?
我知道JustMock处于beta阶段,但它看起来非常不错(非常类似于TypeMock)。
编辑:MS Mole怎么样?

3
别忘了 MoQ,那是我最喜欢的。 - user1228
3
Moq是我用过的最好的测试框架,可以促进编写良好、干净、可测试的代码。原文链接:http://stackoverflow.com/questions/64242/rhino-mocks-typemock-moq-or-nmock-which-one-do-you-use-and-why - Finglas
1
还有一个叫做FakeItEasy的工具,它提供了自然的伪造/存根/模拟对象,就像Rhino一样,但语法更简洁,配置上下文DSL更好。http://code.google.com/p/fakeiteasy - Patrik Hägne
6个回答

22
在出现JustMock之前,有人问了这个问题,答案可以在这里找到。 有一个非常好的模拟框架比较 - 它还没有JustMock,但您可以看到每个.NET模拟框架的语法和功能。
RhinoMocks(和Moq)都是开源免费使用的项目,可以通过继承类型创建虚假对象,这意味着它们无法伪造静态方法、结构体和密封类。
Typemock Isolator使用CLR分析器拦截.NET调用并在运行时更改它们,可以伪造几乎任何东西。Typemock还可以伪造测试中无法“到达”的对象,因为它们在生产代码中实例化。 一些人称其为“黑魔法”,但其他人认为可以伪造几乎所有内容 - 包括第三方库和遗留代码 - 是必须的。
JustMock是一个新玩家,现在只有Beta版本 - 它具有Typemock Isolator的某些功能,并且可以在没有分析器API的情况下运行 - 在这种模式下,它就像RhinoMocks一样。 目前还不清楚它真正拥有Typemock Isolator多少功能。现在看来,这是朝着正确方向迈出的良好开端,但在成为有效选项之前还需要一些距离。

Moq 可用于存根、伪造和模拟对象。 - Finglas
所有的模拟框架都可以做到这一点 - 问题是针对哪些对象。 - Dror Helper
1
JustMock和TypeMock都附带有价格标签,这值得一提。 - Johan

14

我最近从 RhinoMocks 转换到 Moq

它们都具有类似的功能,但是 Moq 有更加 清晰易懂的API


12

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

关于JustMock,有几点需要注意。它的API更类似于Moq而不是RhinoMocks,因此如果您熟悉Moq,学习JustMock应该没有问题。 在JustMock中,我们尝试改进的一点是在模拟顺序调用时具有更好的故事性。 此外,正如其他人已经提到的,JustMock使得使用相同的Moq-like语法能够模拟静态类和方法/属性,封闭类,非虚拟方法和属性等等。 同时,由于这个特性,在JustMock中也可以进行部分模拟。

顺便说一下,Dror提到的“黑魔法”在使用JustMock时也是可能的,只需直接引用Telerik.CodeWeaver.Hook程序集即可,但遗憾的是目前还没有文档记录。 如果有人想这样做,他可以打开支持票据,我们将非常乐意提供帮助。

希望这能帮到您。


8
此外,还可以查看 Microsoft Moles。它是一个用于 .NET 的隔离测试框架,允许您使用自定义委托替换任何 .NET 方法。
Moles 有一个可用于商业项目并支持 Visual Studio 2008 和 2010 的版本。

1
编程时使用全是基于 XML 的东西真的很丑陋...太恶心了。 - PositiveGuy

2

还可以参考:https://stackoverflow.com/questions/37359/what-c-mocking-framework-to-use/2608634#2608634

我目前在使用Moq进行单元测试,我必须说它的表现非常好!重述:它非常棒!我没有使用过您提到的其他任何模拟框架,因此无法与之进行比较。但我可以说,我很高兴选择了Moq作为我的第一个尝试模拟框架。Lambda表达式非常好用,而且它也相当轻量级和易于阅读(大多数其他模拟框架中的记录/回放语法并不能真正提高可读性)。

除此之外(这有点离题),我将在不久的将来使用Ninject作为IoC容器,这两个框架是相辅相成的。Ninject也具有Lambda表达式,并且甚至为Moq提供自动模拟容器支持(使用扩展)。因此,如果您也计划使用IoC容器,您可以检查这个强大的组合:]


1

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

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

我不知道JustMock,所以无法告诉您它的工作原理。

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

我希望其他人能给您更多细节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接