另见“What should I consider when choosing a mocking framework for .Net”
我正在尝试决定在我最近开始使用的.NET项目上使用的模拟框架。我想加快对不同框架的研究。我最近阅读了这篇博客文章http://codevanced.net/post/Mocking-frameworks-comparison.aspx,并想知道是否有任何StackOverflow受众在实际优势和框架注意事项方面有任何补充。
人们是否可以列出他们目前正在使用或已经调查过自己在.NET项目中使用的模拟框架的优缺点。我认为这不仅有助于我决定当前的项目,还可以帮助其他人在为他们的情况选择正确的框架时做出更明智的决策。我不是任何框架的专家,但我想得到支持和反对我遇到的主要框架的论据:
我错过了其他可用的替代品。我也喜欢那些由于问题而转换或停止使用产品的用户的见解。
答案 0 :(得分:13)
我根本不认识Moles,但我会介绍一些我知道的(尽管如此我真的需要一张桌子)。
<强>起订量强>
赞成
缺点
犀牛嘲笑
赞成
缺点
TypeMock Isolator
赞成
缺点
<强> NMock 强>
赞成
缺点
请注意,特别是有关TypeMock的优点和缺点是极具争议性的。我发表了my own take on the matter on my blog。
我开始使用NMock,这是2003年的唯一选择,然后由于其类型安全而迁移到Rhino Mocks,现在因为API更简单而使用Moq。
答案 1 :(得分:3)
到目前为止,我已经使用过RhinoMocks和Moq。 Moq目前是我最喜欢的,因为它的简单性是我目前所需要的。 RhinoMocks非常强大,但我从来没有能够充分利用它。
答案 2 :(得分:2)
我们已经使用Rhino Mocks一年多了。 PRO:
反对:
总的来说,我们发现使用模拟框架可以促进“白盒子”测试(特别是对于单元测试)。我们最终得到的测试证实了事情的完成情况,而不是他们在做什么。它们对重构毫无用处,我们不得不重写它们中的大多数。
答案 3 :(得分:2)
像弗兰克和克里斯一样,我尝试过RhinoMocks并切换到Moq。我没有失望。查看我的一系列博文:
编辑:请注意,我通常使用存根进行基于状态的测试;我很少用可验证的模拟进行行为测试。
答案 4 :(得分:1)
我没有使用过所有这些框架,但我查看了RhinoMocks和Moq,并选择了Moq,因为它感觉更优雅,更简单。我正在使用trunk版本,其中包含对最近4.0 beta版本中回调的4参数限制必须修复。
我特别喜欢默认的Moq行为,当进行意外调用时,它的行为不像严格的模拟对象失败测试。如果你愿意,你可以将它配置为执行此操作,但我发现这需要花费太多时间来设置期望而没有足够的时间进行测试。
答案 5 :(得分:1)
我使用TypeMock,因为我正在开发SharePoint。由于TypeMock可以模拟任何东西,因此在单元测试我们的SharePoint Web部件,事件接收器,工作流等时,它被证明是一种宝贵的资源。
在缺点方面,TypeMock可能很昂贵,但有一个version可用,这是特定于SharePoint的,并且成本低于完整的TypeMock包。我强烈推荐它。
我不同意的一点是,这种观念认为TypeMock不能让你很好地设计你的代码。我创建的类和整体代码通常设计得很好。仅仅因为我使用TypeMock并不意味着我牺牲了我的设计质量 - 我仍然在练习IoC和SRP。仅仅因为TypeMock可以模拟任何东西并不意味着我编写代码来反映这种能力。
答案 6 :(得分:0)
您可能需要记住,如果您需要支持多语言环境(例如VB),所有代码可配置框架(我可以直接与Moq和RhinoMocks对话)将会很痛苦(缺乏) )VB中的匿名委托/ lambda语法。这在Visual Studio 2010 / VB 10中更有可能,但仍然无法与漂亮的C#lambda语法相媲美。