Dependency injection 测试驱动开发(TDD)确保依赖注入(DI)?

Dependency injection 测试驱动开发(TDD)确保依赖注入(DI)?,dependency-injection,tdd,Dependency Injection,Tdd,对不起,这可能是个糟糕的问题,但我有点困惑 TDD是否有助于确保DI?或者反过来说(TDD需要DI)。两者都不是。 TDD应该有助于设计更好的软件。 更好的设计可能使用控制模式的反转 DI是IOC模式的一种实现TDD是一种设计和开发软件的方法 依赖注入是一种允许在运行时或编译时在给定依赖接口的多个实现之间进行选择的技术 虽然有人可能会说这两者是独立的,但在没有DI的情况下进行TDD是可能的,但很困难。因此,我想说,为中大型项目进行TDD确实需要依赖注入。这实际上是一个非常好的问题 我要说的是,T

对不起,这可能是个糟糕的问题,但我有点困惑

TDD是否有助于确保DI?或者反过来说(TDD需要DI)。

两者都不是。 TDD应该有助于设计更好的软件。 更好的设计可能使用控制模式的反转


DI是IOC模式的一种实现

TDD是一种设计和开发软件的方法

依赖注入是一种允许在运行时或编译时在给定依赖接口的多个实现之间进行选择的技术


虽然有人可能会说这两者是独立的,但在没有DI的情况下进行TDD是可能的,但很困难。因此,我想说,为中大型项目进行TDD确实需要依赖注入。

这实际上是一个非常好的问题

我要说的是,TDD的DNA中没有任何东西使它与依赖注入有本质的联系。碰巧TDD中的重构步骤有时会导致将行为提取到外部依赖项,然后可以选择通过其构造函数将外部依赖项注入到被测试的类中。虽然没有系统性,但如何管理依赖关系更多地取决于重构者自己的喜好

反之亦然——DI中没有任何东西强迫您使用TDD方法编写代码。DI确实提高了可测试性,但这并不一定意味着测试优先或红绿重构周期


然而,TDD的后期细化/专门化确实大量使用依赖注入,并且TDD实践者通常也是坚实原则的支持者,其核心包括依赖倒置。隔离和自动模拟框架等流行工具也将TDD和DI结合起来。这可能就是这两种实践经常被一起使用和讨论的原因。

获取一份,您将了解有关DI的所有内容。感谢本书的建议。我可以用一种扭曲的方式说“TDD有助于确保使用DI(或IoC)的更好的软件设计”吗?如果更好的设计意味着IoC,那么是的。尽管为了更正确,TDD促进了可测试设计,并且为了有效地进行单元测试,IOC通常非常有用。:)如果您想推广TDD,请集中精力从一开始就进行单元测试,而不是栓接(或经常尝试栓接单元测试)实际实现什么。IOC和DI是如何进行的,真正的交易是能够更改软件并保持对范围、工作和结果的控制。特别是当你与管理层交谈时。没有一个称职的开发人员反对TDD,自卫是阻止我们经常被MBA类型殴打的原因。这有点像鸡和鸡蛋?:)或者更像培根和鸡蛋:相互正交,但在一起玩得很好;)