我正在使用依赖注入使我的课程可单元测试。但是其中一些类有很多客户端,而且我还没有准备好重构所有这些类以开始传递依赖项。所以我正在努力逐步做到;暂时保留默认依赖关系,但允许对其进行覆盖以进行测试。
我正在考虑的一种方法是将所有“新”调用移入它们自己的方法,例如:
public MyObject createMyObject(args) {
return new MyObject(args);
}
然后,在我的单元测试中,我可以继承该类的子类,并覆盖create函数,以便由它们创建伪造的对象。
这是一个好方法吗?有什么缺点吗?
更一般而言,只要您可以替换它们以进行测试,就可以使用硬编码的依赖项吗?我知道首选方法是在构造函数中明确要求它们,而我希望最终到达那里。但是我想知道这是否是一个好的第一步。
我刚想到的一个缺点是:如果您有需要测试的真实子类,则无法重用为父类编写的测试子类。您必须为每个真实的子类创建一个测试子类,并且它必须覆盖相同的create函数。