18

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

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

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

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

4

2 回答 2

16

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

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

于 2008-12-11T12:13:19.083 回答
1

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

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

于 2008-12-08T13:05:24.953 回答