【问题标题】:What is the benefit of mocking an interface instead of a concrete class模拟接口而不是具体类有什么好处
【发布时间】:2012-01-25 21:06:04
【问题描述】:

模拟一个具体的类和一个接口有什么好处吗?

样本:

在我的CustomerService 类中,我将CustomerDataProvider 称为类似

customerDataProvider.GetCustomers();

customerDataProvider 也可以是ICustomerDataProvider 类型。当我只想在不去数据库的情况下测试CustomerService 中的逻辑时,我必须模拟ICustomerDataProviderCustomerDataProvider 类型的customerDataProvider 对象。

mock 一种类型相对于另一种类型的优势在哪里?

【问题讨论】:

  • 这取决于你为什么首先需要模拟它......你能更详细地描述你的测试场景吗?没有它,这是一个主观问题。

标签: class interface mocking concrete


【解决方案1】:

模拟一个接口而不是一个类的主要好处是它更简单——接口不能是密封/最终的,它们不能有你不能覆盖的方法,它们不能有不寻常的构造语义。模拟库可以消除模拟类的许多令人头疼的问题,但它们无法弥补不可测试的设计。

模拟类而不是接口的主要原因是:有时你只有一个类。如果您正在做自己的设计和实现,那么您可以选择构建一个或另一个。如果你正在使用别人的图书馆,你必须处理它提供的东西。

【讨论】:

  • “......你必须处理它提供的东西”一个类总是存在一个接口而不是。所以没有好处?
  • 从实施的角度来看绝对受益。已编辑。
猜你喜欢
  • 1970-01-01
  • 2019-02-04
  • 2017-02-02
  • 2011-05-14
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 2019-11-13
相关资源
最近更新 更多