我一直在使用moq来模拟单元测试中的对象,并且在moq网站上看到它可以模拟类和接口。
前几天我与我的一个同事讨论时,他说永远没有理由去模拟类,只需要模拟接口。
我没有真正的答案......在moq网站上似乎也找不到答案。
一个人永远不应该模拟类是真的吗?我认为不是,因为如果是这样,Moq就不会允许这样做了....那么,有没有比接口更好地模拟类的时候?模拟类和模拟接口之间有什么区别?或者只是个人喜好?
模拟一个类是完全有效的。使用MoQ,您只能模拟类上的虚拟方法和属性。
当您有抽象基类而不是接口或带有默认实现和虚函数作为扩展点的类时,它非常有用。在许多情况下,您无法访问需要模拟的类的源代码。在.NET框架中有很多例子,例如MembershipProvider。
如果类没有实现接口或者模拟框架允许部分模拟,那么你就需要能够模拟这个类。在前一种情况下,因为没有接口可以模拟。在后一种情况下,你可以继承不想模拟的类的现有行为。
通常情况下,当接口可用时,你会希望你的类依赖于接口。在这种情况下,你不需要模拟实现了接口的类。你只需要模拟接口本身,以避免测试中存在于被测试类中不存在的任何依赖关系。