我刚开始做测试驱动开发,我想知道RhinoMock,TypeMock和NUnit的内置模拟之间的主要区别?
非常感谢任何信息!
答案 0 :(得分:37)
TypeMock是一种商业产品(意味着你必须付钱),但它允许你模拟具体的对象 - 不像RhinoMocks / NUnit / MoQ,它只能模拟一个接口/抽象类。如何实现这一点是边缘黑魔术,但它使用CLR做了一些非常聪明的事情。
当您在项目中使用不使用许多接口的库时,这可能特别有用。例如,您可以使用TypeMock模拟LINQtoSQL datacontext或Sharepoint对象。但是,如果您使用的是TypeMock,那么没有理由在您的应用程序中设计错误。
据我所知,除了较小的语法差异外,大多数模拟框架已经远离旧的记录/回放模型。通常,您通过使用Fluent界面编写期望来设置模拟。
就个人而言,我只使用过MoQ而我用<3。
答案 1 :(得分:19)
Roy Osherove撰写的名为TDD - Understanding Mock Objects的视频非常有助于学习不同模拟库的差异。他没有详细介绍每个方面,但足以让你理解。我希望这有帮助。 Roy也是TypeMock的首席架构师,在单元测试领域是一位非常有影响力的人物。对于想要学习如何使用模拟并了解图书馆可用的人,我不能推荐这个视频。
TypeMock和开源库之间的主要区别在于TypeMock使用Microsoft提供的Profiler API而不是dynamic proxy。这允许TypeMock模拟具体类和静态方法。如果您不确定分析器是什么,它与JetBrain的dotTrace和RedGate的Ants .Net分析器等工具使用的API相同。 TypeMock只是以不同的方式使用API伪造(模拟)你告诉它的内容。
@RichardOD,感谢提醒,他的书“The Art of Unit Testing”详细介绍了视频没有的内容。我拥有这本书,而且信息非常丰富。
答案 2 :(得分:14)
我对这些人没有任何亲身经历,但是......
答案 3 :(得分:2)
我一直使用TypeMock,并发现它是一个非常强大的工具,可以提高我的单元测试的覆盖率。这是因为我使用SharePoint,只有TypeMock可以允许我模拟SharePoint类 - 因为它们是具体的类而不是接口。
使用RhinoMock,Moq,NUNit等模拟SharePoint类是不可能的,因为(我相信)它们需要接口来模拟对象,而不是能够模拟实际的具体类。
如果你的代码确实使用了很多接口,并且你不需要模拟具体的类,那么TypeMock有点贵,但是对于你获得的功能,这是值得的。