我是否应该为每个类创建一个接口来使我的代码可测试(单元测试)

时间:2018-06-30 10:55:16

标签: unit-testing testing interface

我正在尝试学习如何创建有价值的单元测试。 在每个教程中,我看到人们为每个依赖项创建接口以创建模拟。

这是否意味着我应该始终为项目中的每个类创建一个接口?我不知道这是一个好主意还是一个坏主意,但是每次我看到“总是”规则时,我都会感到怀疑。

1 个答案:

答案 0 :(得分:2)

  

我应该始终为项目中的每个类创建一个接口吗?

否。

您没有一个可以遵循的规则或可以做的事情来使所有代码自动进行单元测试。您可以要做的是编写具有抽象依赖的代码。如果要测试编写的代码是否易于进行单元测试,请尝试为其编写单元测试。如果您遇到一个依赖关系,那么您将拥有一个耦合的依赖关系。对其进行抽象。

如何您可以自己抽象。您可以使用各种工具:

  1. 接口
  2. 抽象类
  3. 具有很多virtual成员的具体课程
  4. 可模拟的直通包装类(对于不可进行单元测试的第三方依赖项非常有用)

您还可以通过多种方法将依赖项放入使用它的代码中:

  1. 构造函数注入
  2. 财产注入
  3. 将其作为参数传递给方法
  4. 工厂
  5. 在某些情况下,服务定位器(例如在将依赖关系抽象引入旧代码库时很有用)

代码的结构方式实际上取决于您正在构建的内容以及对那些对象有意义的内容。对于与外部系统集成的服务类,接口很有意义。对于具有共享功能的各种潜在实现的域模型,抽象类可能很有意义。有许多可能的用途。

关于您的代码是否可以单元测试的真正试金石测试不是“我使用接口吗?”,而是“我可以为此编写有意义的单元测试吗?”如果该功能可隔离而不依赖于依赖项(通过不依赖项或通过对它们进行模拟以进行测试),那么对我来说似乎是可单元测试的。