【问题标题】:Why would I select Moles as my mocking framework?为什么我会选择 Moles 作为我的模拟框架?
【发布时间】:2011-03-03 08:42:40
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc mocking moq pex-and-moles


    【解决方案1】:

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

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

    【讨论】:

    • +1 两者可以一起使用的重要一点 - 你只需要仔细选择你的“首选嘲笑者”。
    • 很高兴看到这样的例子,关于您的工作流程的任何博客文章?我觉得 TDD tbh 有点不自然
    • 你说得对,它值得一个例子——我现在没有,但我会环顾四周,看看是否有任何代码可以变成一个。
    • 这是一个使用 Moles 的 NUnit 测试:github.com/fschwiet/Using_Moles_with_NUnit/commit/…
    【解决方案2】:

    Moles 旨在与 Pex 的白盒分析一起高效工作。所有其他模拟框架通常会产生大量开销。

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

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

    如果您有接口和良好的组件化代码,Moles 还会生成纤细的存根,即接口实现,您可以将其与分析器一起使用。

    【讨论】:

    • +1 如果您想查看某个方法在 Moles 中被调用了多少次,您必须放入自己的计数器并让委托调用原始方法(如果需要)。将其与 Times.Once 和某些框架(如 Moq)提供的其他方法进行对比。
    【解决方案3】:

    Moles 更常与 TypeMock 进行比较/对比,因为它在 Moq 和/或 RhinoMocks 的最佳位置之外提供了一组设施。

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

    查看this Dimecasts.net video 以获得一个不错的概览。

    【讨论】:

    • @bobsmith123:在这种情况下,我个人认为没有理由使用更重量级的模拟框架——我会推迟使用这种火炮直到有必要。使用 Pex 是一个单独的决定,但应该与您选择的模拟框架无关。为什么你用 Pex 标记 q,然后不引用它 - 你有兴趣使用它/你问它们是花生酱和果冻吗/你认为它与 Moles 不可分割吗?
    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多