向类中添加更多依赖项听起来像是太多工作

Uma*_*med 5 tdd dependency-injection

我是依赖注入的新手.我有点困惑希望有人可以帮助我......

假设我们有一个类A,它有一个通过构造函数注入的依赖项(接口IB).假设我已经写了几十个为A类编写的测试用例,现在在后一阶段我发现我需要一个A类依赖(比如接口IC).这是否意味着我必须修改我的构造函数和所有测试用例?因为我将在测试用例中为A类创建对象.

编辑:还必须修改所有测试用例增加了我们可能在测试用例中出现一些错误的可能性.

Mar*_*ann 8

不是DI的问题 ; 这是测试问题.更具体地说,您正遭受脆弱的测试气味.

这可以通过使用SUT Factory来解决,而不是使用关键字直接创建SUTnew.这将允许您在将来更改构造函数签名而不会破坏大量测试.


oia*_*kyi 5

这是一个很好的问题.我认为它有两个部分 - 实际需要改变构造函数的签名和引入新依赖的行为.

添加新参数到构造函数不应该太麻烦,特别是考虑到当代IDE中的重构工具(例如Eclipse中的Change Method Signature),它将添加参数并更改调用此构造函数的所有位置.

另一方面,在我看来,引入新的依赖性总是一个重构的机会.如果你的A级无法在没有新的依赖性的情况下完成其功能,那么它就会开始承担太多的责任.

在许多地方,可以帮助您克服在测试中更改用于创建对象的代码的需求的一个技巧是使用专用工厂来处理准备好进行测试的状态中的对象实例的准备.您不必在生产中使用工厂(DI容器完全相同),但在测试代码中它可能会变得方便.