Asp.net mvc 为什么我会选择Moles作为我的模拟框架?

Asp.net mvc 为什么我会选择Moles作为我的模拟框架?,asp.net-mvc,mocking,moq,pex-and-moles,Asp.net Mvc,Mocking,Moq,Pex And Moles,我一直在研究ASP.NET的几个模拟框架,并遇到了Microsoft Moles。这似乎是微软研究团队的一部分,我想知道这里是否有人选择了Moles而不是其他成熟的模拟框架,如Moq。Moles更经常与TypeMock进行比较/对比,因为它提供了一套Moq和/或RhinoMocks最佳点之外的设施 在选择时,你必须问自己的主要问题是,你是想让你的测试保持相对较低的技术水平,还是想参与更高水平的技术欺骗。这在很大程度上取决于您所做的事情——您标记了ASP.NET而不是MVC,这表明它可能确实与您相

我一直在研究ASP.NET的几个模拟框架,并遇到了Microsoft Moles。这似乎是微软研究团队的一部分,我想知道这里是否有人选择了Moles而不是其他成熟的模拟框架,如Moq。

Moles更经常与TypeMock进行比较/对比,因为它提供了一套Moq和/或RhinoMocks最佳点之外的设施

在选择时,你必须问自己的主要问题是,你是想让你的测试保持相对较低的技术水平,还是想参与更高水平的技术欺骗。这在很大程度上取决于您所做的事情——您标记了ASP.NET而不是MVC,这表明它可能确实与您相关


请看一看,以获得一个很好的概述。

摩尔被设计用于Pex的白盒分析。所有其他模拟框架通常会产生大量开销

Moles提供了一个简单的价值主张:用委托替换任何.NET方法。根据设计,Moles不像其他框架那样提供任何API来表示“验证”。这真的是由你来决定这个决定是否适合你

如果您需要处理依赖于硬编码静态方法或带有内部构造函数的密封类型的(遗留)代码,Moles可以帮助您处理这些情况

如果您有接口和良好的组件化代码,Moles还会生成细长的存根,即接口实现,您可以使用profiler。

我实际上在同一个测试项目中使用Moq和Moles。两者都有优点,我会在适当的地方使用它们。一般来说,我使用Moq进行标准的AAA验证测试,Moles是其他不可修改的东西的“大炮”,比如扩展方法调用等


我喜欢这种安排,因为每个测试都可以尽可能简单和合理,即使模拟设置可能因测试而异

@bobsmith123:如果是那样的话,我个人认为没有理由使用更重的模拟框架——我会推迟到必要的时候再使用这种火炮。使用Pex是一个单独的决定,尽管它应该独立于您选择的模拟框架。为什么你在q上贴上Pex标签,然后不提及它-你对使用它感兴趣吗/你在问它们是花生酱和果冻吗/你认为它与痣是不可分割的吗?+1重要的一点是,两者可以一起使用-你只需要仔细选择你的“首选嘲弄者”。如果能看到这样一个例子,那就太好了,有关于你的工作流程的博客帖子吗?我觉得这对TDD TBHY来说有点不现实,你是对的,它值得一个例子-我现在没有,但我会四处看看,看看我的任何代码是否可以转换成一个。这里有一个NUnit测试,使用Moles:+1,如果你想知道一个方法在Moles中被调用了多少次,您必须放入自己的计数器,并让代理调用原始方法(如果需要)。与
Times.Once
和一些框架(比如Moq)提供的其他方法相比。