什么是依赖注入?

问题描述

将依赖传递给其他 或 (依赖注入器)。

依赖注入使测试更加容易。注入可以通过 完成。

SomeClass() 其构造函数如下:

public SomeClass() {
    myObject = Factory.getObject();
}

:如果myObject涉及复杂的任务,例如磁盘访问或网络访问,则 对其进行单元测试SomeClass()。程序员必须进行模拟,myObject并可能 工厂调用。

  • myObject作为参数传递给构造函数

    public SomeClass (MyClass myObject) { this.myObject = myObject; }

myObject 可以直接通过,这使测试更加容易。

  • 一种常见的替代方法是定义 。依赖注入可以通过设置器来完成。(h / t @MikeVella)。
  • Martin Fowler记录了第三种选择(h / t @MarcDix),其中 程序员希望注入的依赖项 。

如果没有依赖注入,则很难在单元测试中隔离组件。

2013年,当我撰写此答案时,这是Google Testing Blog的一个主要主题。这对我来说仍然是最大的优势,因为程序员在运行时设计中并不总是需要额外的灵活性(例如,对于服务定位器或类似的模式)。程序员在测试过程中经常需要隔离类。

解决方法

已经发布了几个问题,其中包括有关依赖项注入的特定问题,例如何时使用它以及支持它的框架。然而,

什么是依赖项注入?何时/为什么/不应该使用它?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...