我一直在研究几个用于 ASP.NET 的 Mocking 框架,并遇到了 Microsoft Moles。这似乎是微软研究团队的一部分,想知道这里是否有人选择了 Moles 而不是其他成熟的 Mocking 框架,如 Moq。
3 回答
我实际上在同一个测试项目中使用 Moq和Moles。两者都有长处,我会在适当的时候使用它们。通常,我使用 Moq 进行标准类型的 AAA 验证测试,而 Moles 是其他不可修改的东西的“大炮”,例如扩展方法调用等。
我喜欢这种安排,因为每个测试都可以尽可能简单和合理,即使模拟设置可能因测试而异。
Moles 旨在与 Pex 的白盒分析一起高效工作。所有其他模拟框架通常会产生大量开销。
Moles 提供了一个简单的价值主张:用委托替换任何 .NET 方法。按照设计,Moles 不像其他框架那样提供任何 API 来表达“验证”。这个决定是否适合你真的取决于你。
如果您需要处理依赖于硬编码静态方法或带有内部构造函数的密封类型的(遗留)代码,Moles 可以帮助您处理这些情况。
如果你有接口和很好的组件化代码,Moles 还会生成苗条的存根,即接口实现,你可以与分析器一起使用。
Moles 更经常与 TypeMock 进行比较/对比,因为它在 Moq 和/或 RhinoMocks 的最佳位置之外提供了一组设施。
您在选择时必须问自己的主要问题是,您是想保持测试的技术含量相对较低,还是卷入更高水平的技术骗局。这在很大程度上取决于您所做的事情 - 您已标记 ASP.NET 而不是 MVC,这表明它可能确实与您相关。
看看这个 Dimecasts.net 视频以获得很好的概述。