我一直在寻找ASP.NET的几个Mocking框架,并遇到了微软莫尔斯。这似乎是微软研究小组的一部分,他想知道如果有人在这里选择了Moles而不是其他成熟的Mocking框架,比如Moq。为什么我会选择Moles作为我的嘲讽框架?
回答
我实际使用Moq 和痣在同一个测试项目中。两者都有优势,我会在适当的地方使用。一般来说,我使用Moq进行标准的AAA测试和验证,而Moles是其他方面无法模仿的东西的“大枪”,如扩展方法调用等。
我喜欢这种安排,因为每个测试都可以像尽管模拟设置在测试之间可能会有很大差异,但尽可能简单明智。
鼹鼠经常与TypeMock进行比较/对比,因为它提供Moq和/或RhinoMocks的甜蜜点以外的一套设施。
您在选择时需要考虑的主要问题是您是否希望保持测试技术相对低技术含量或参与更高级别的技术欺骗。这很大程度上取决于你在做什么 - 你已经标记了ASP.NET而不是MVC,这表明它可能确实与你有关。
看一看this Dimecasts.net video有一个很好的概述。
我正在使用ASP.NET MVC。我更新了标签。 – user300981 2010-06-15 02:45:43
@ bobsmith123:在这种情况下,我个人不会看到使用更重量级嘲讽框架的理由 - 我会推迟在这样的炮兵中拉直到必要的时候。使用Pex是一个单独的决定,但应该独立于你选择的嘲讽框架。你为什么用Pex标记q,然后不提及它 - 你是否有兴趣使用它/你问他们是花生酱还是果冻/你认为它是从莫尔斯不可分割的吗? – 2010-06-15 07:37:17
鼹鼠被设计成与Pex的白盒分析高效工作。所有其他模拟框架通常会产生大量开销。
Moles提供了一个简单的价值主张:用代理替换任何.NET方法。按照设计,Moles不像其他框架那样提供任何API来表达“验证”。决定这个决定是否适合你,真的取决于你。
如果您需要使用内部构造函数处理依赖于硬编码静态方法或密封类型的(遗留)代码,Moles可以帮助您处理这些情况。
如果您有接口和很好的组件化代码,Moles还会生成细长的存根,即接口实现,您可以使用该分析器。
+1如果您想查看在莫尔斯中调用某个方法的次数,您必须放入自己的计数器并让委托调用原始方法(如果需要)。与'Times.Once'和其他一些框架提供的方法(如Moq)相比。 – Pat 2010-08-11 21:06:27
- 1. 关于嘲讽框架
- 2. 嘲讽实体框架
- 3. 为什么我们需要嘲笑框架?
- 4. IIS7:为什么我不能选择v3.5 .net框架?
- 5. Mocha优于RSpec内置嘲讽框架的优势是什么?
- 6. 为什么我UIPickerView选择
- 7. 嘲讽“System.Console行为
- 8. 嘲讽会议
- 9. rspec mocking与其他嘲讽框架有什么优缺点?
- 10. 为什么我的框架是空的?
- 11. 为什么我的动作不会响应选择器?
- 12. 嘲讽实体框架给了我对象没有设置到
- 13. 为什么我的多重选择与选择不工作?
- 14. 嘲笑框架与功能测试,为什么要嘲笑?
- 15. mysqli的嘲讽行为bind_result
- 16. 与实体框架嘲讽库
- 17. Javascript嘲讽框架 - 杰克例子
- 18. Boost ::测试和嘲讽框架
- 19. MVC使用嘲讽框架(Moq)测试
- 20. 模拟框架,支持以委托为参数嘲讽方法
- 21. 嘲笑SqlDataAdaptor时,为什么Moles没有返回“moled”DataSet?
- 22. 为什么我要使用PHP框架
- 23. 为什么我的选项不会附加到所有选择
- 24. 为什么实体框架会丢失我的索引?
- 25. 嘲讽迭代行为
- 26. 嘲讽预期为代表
- 27. 为什么我的选择框在添加新选择框后重置?
- 28. 为什么我应该嘲笑?
- 29. 嘲笑框架中的未来嘲讽概念
- 30. 为什么我得到一个黑色的框架,而不是选择器?
+1重要的一点,两者可以一起使用 - 你只需要仔细选择你的'第一度假胜地'。 – 2010-06-21 09:00:26
将很高兴看到这样的例子,您的工作流中的任何博客文章?我觉得TDD tbh – roundcrisis 2010-07-09 11:58:24
有一点不自然,你应该举个例子 - 我目前没有一个例子,但我会环顾四周,看看我的代码是否可以变成一个。 – ZeroBugBounce 2010-07-15 01:56:55