依赖注入,单元测试和信息隐藏

ins*_*pid 3 unit-testing information-hiding dependency-injection

假设你有一个类Foo,类型为Bar的私有成员.您不希望用户知道Foo的实现包含一个Bar,并且您不希望用户能够创建自己的Bar并通过Foo的构造函数,任何其他方法或配置文件传递它.

编辑:Bar也存在问题,因为它访问测试环境控制之外的资源,例如特殊数据库,网络连接或其他进程.

当你还希望能够对Foo进行单元测试时,你会怎么做?依赖注入仍然可能吗?这是否意味着Bar和Foo过于紧密耦合(即使依赖是单向的)并且这种情况永远不可接受?

Jef*_*nal 5

如果可以提供帮助,您永远不想隐藏依赖项.

如果它是您的代码,您应该通过重新设计Bar来接受由昂贵的资源生成的对象而不是直接访问昂贵的资源来明确依赖:将数据库访问代码(或其他任何东西)移出Bar和移入Foo,您可以注入测试双打.

如果这不实用(即,你正在处理其他人的课程),Dror的列表非常好.