【问题标题】:What is the difference between Moq-ing a class or interface?Moq-ing 类或接口有什么区别?
【发布时间】:2010-09-25 20:30:13
【问题描述】:

我一直在使用moq 在我的单元测试中模拟对象,并且我在网站上看到关于 moq 的信息,它能够模拟类和接口。

前几天我和一个同事讨论过,他们说没有理由模拟类,我应该只模拟接口。

我对此并没有真正的答案....而且我似乎也无法在起订量网站上找到任何答案。

真的不应该模拟类吗?我会说不,因为如果这是真的,那么 Moq 甚至不会允许它....那么有没有时候在接口上模拟一个类更好?模拟类与模拟接口有什么区别?还是真的只是一种偏好?

【问题讨论】:

    标签: unit-testing class mocking interface moq


    【解决方案1】:

    模拟一个类是完全有效的。不过,使用 MoQ,您只能模拟类上的虚拟方法和属性。

    当您有抽象基类而不是接口,或者具有默认实现和虚拟作为扩展点的类时,它很有用。在很多情况下,您无法访问需要模拟的类的源代码。 .Net 框架中有很多例子,例如MembershipProvider。

    【讨论】:

      【解决方案2】:

      如果该类没有实现接口,或者如果模拟框架允许部分模拟,那么您可能希望能够模拟该类。在前一种情况下,因为没有接口可以模拟。在后者中,您可以从您不想模拟的类中继承现有行为。

      不过,通常情况下,您希望您的类在可用时依赖于接口。在这种情况下,您不需要模拟实现接口的类。您应该只模拟接口本身,以避免测试中的任何依赖项在被测类中不存在。

      【讨论】:

        猜你喜欢
        • 2022-10-14
        • 2011-08-12
        • 2018-01-06
        • 2010-12-27
        • 1970-01-01
        • 2010-11-13
        • 2013-02-17
        相关资源
        最近更新 更多