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