【发布时间】:2010-11-25 15:21:21
【问题描述】:
我刚开始做测试驱动开发,我想知道 RhinoMock、TypeMock 和 NUnit 的内置模拟之间的主要区别?
任何信息将不胜感激!
【问题讨论】:
标签: unit-testing nunit mocking rhino-mocks typemock
我刚开始做测试驱动开发,我想知道 RhinoMock、TypeMock 和 NUnit 的内置模拟之间的主要区别?
任何信息将不胜感激!
【问题讨论】:
标签: unit-testing nunit mocking rhino-mocks typemock
TypeMock 是一种商业产品(意味着您必须为此付费),但允许您模拟具体对象 - 不像 RhinoMocks/NUnit/MoQ 只能模拟接口/抽象类。它是如何实现这一点的,这是一种边缘黑魔法,但它使用 CLR 做了一些非常聪明的事情。
当您在项目中使用不使用很多接口的库时,这可能特别有用。因此,例如,您可以使用 TypeMock 模拟 LINQtoSQL 数据上下文或 Sharepoint 对象。但是,如果您使用的是 TypeMock,这不是您应用程序设计不佳的借口。
据我所知,除了细微的语法差异外,大多数模拟框架都已脱离旧的记录/播放模型。通常,您通过使用 Fluent Interface 编写期望来设置模拟。
就我个人而言,我只使用了 MoQ 并且我
【讨论】:
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”在视频没有的地方进行了更详细的介绍。我拥有这本书,内容丰富。
【讨论】:
我没有与其他人有过任何亲身经历,但是......
【讨论】:
我一直在使用 TypeMock,发现它是一个非常强大的工具,可以提高我的单元测试的覆盖率。这是因为我使用 SharePoint,只有 TypeMock 可以让我模拟 SharePoint 类 - 因为它们是具体类而不是接口。
RhinoMock、Moq、NUIt 等无法模拟 SharePoint 类,因为(我相信)它们需要模拟对象的接口,而不是能够模拟实际的具体类。
如果您的代码确实使用了很多接口,并且您不需要模拟具体类,那么 TypeMock 有点贵,但就您获得的功能而言,这是值得的。
【讨论】: