我需要为新项目选择模拟框架。
这些框架的优缺点是什么? 任何比较表?
我知道JustMock是我的beta阶段,但它现在看起来非常好(非常类似于TypeMock)
编辑:我怎么样MS鼹鼠?
答案 0 :(得分:21)
在有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功能。现在它似乎是朝着正确方向迈出的良好开端,但它仍然有一段距离才能成为一个有效的选择。
答案 1 :(得分:14)
我最近从 RhinoMocks 切换到 Moq 。
两者都具有相似的功能,但 Moq 有更多更清洁的API
答案 2 :(得分:11)
[免责声明 - 我在Telerik工作]
关于JustMock的几点意见。它的API与Moq的API更相似,而不是RhinoMocks,所以如果你熟悉Moq,你应该不会有学习JustMock的问题。 我们在JustMock中尝试做得更好的是在模拟顺序调用时有一个更好的故事。 另外,正如有人已经提到的,JustMock可以使用相同的Moq类语法来模拟静态类和方法/属性,密封类,非虚方法和属性等。 还要感谢JustMock中的这个,可以做部分嘲笑。
顺便说一下,如果你直接引用Telerik.CodeWeaver.Hook程序集,那么当使用JustMock时,Dror提到的“黑魔法”也是可能的,但不幸的是,目前还没有记录。 如果有人想这样做,他可以打开支持票,我们很乐意提供帮助。
希望这有帮助。
答案 3 :(得分:8)
同时签出Microsoft Moles,.NET的隔离框架,允许用自定义委托替换任何.NET方法。
Moles有一个可用于商业项目的版本,并在Visual Studio 2008和2010中得到支持。
答案 4 :(得分:2)
另见:https://stackoverflow.com/questions/37359/what-c-mocking-framework-to-use/2608634#2608634
我目前正在Moq进行单元测试,我必须说它运作良好! - 改述:它很棒!我没有使用你提到的任何其他模拟框架,所以我不能给你一个比较。但我可以说,我很高兴我选择Moq作为我的第一个尝试模拟框架。 lamda表达式非常好,而且它非常轻巧,读者友好(大多数其他模拟框架中的记录/重放语法并没有真正使你的可读性好)
除此之外(这有点偏离主题)我将在不久的将来使用Ninject作为IoC Container,并且两个框架都是相辅相成的。 Ninject还拥有Lamda,它甚至为Moq提供自动模拟容器支持(使用扩展)。因此,如果您还计划使用IoC容器,您可以检查这个非常棒的组合:]
答案 5 :(得分:1)
我不会告诉你哪个是最好的,因为每个人都有其优点和缺点。我总是使用Rhino Mocks,因为它是免费的,周围有一个很棒的社区,很容易找到任何帮助。
TypeMock不是免费的(我猜)。但是,如果您希望使用私有或静态类型的成员来测试遗留代码,那么TypeMock非常棒。其他模拟框架无法做到这一点。缺点是它不会强迫您编写可测试代码,该代码具有可测试性的其他好处。
我不知道JustMock所以不能告诉你它是如何工作的。
我会建议你尝试所有这些并选择一个你觉得舒服的人。但是,如果您需要测试遗留代码,请选择TypeMock。
我希望其他人能给你更多细节。