我遇到了一些Java代码,其中公共构造函数调用了一个包私有构造函数,并使用一堆new
运算符来创建新对象。
public class Thing {
//public
public Thing(String param1, int paramm2) {
this(param1, param2, new Dependency1(), new Dependency2());
}
//package-private for the sake of testing
Thing(String param1, int param2, Dependency1 param3, Dependency2 param4) {
this.memberVar1 = param1;
this.memberVar2 = param2;
this.memberVar3 = param3;
this.memberVar4 = param4;
}
//...rest of class...
}
在我看来,这种做法是错误的,因为你编写代码是为了测试它,而不是编写正确的代码。我认为另外两个选项(我能想到的)要么是创建一个工厂,要么是使用PowerMockito
在适当的位置注入一个新对象。就我个人而言,我会按照下面的方式编写。
public class Thing {
//public
public Thing(String param1, int paramm2) {
this.memberVar1 = param1;
this.memberVar2 = param2;
this.memberVar3 = new Dependency1();
this.memberVar4 = new Dependency2();
}
//...rest of class...
}
什么是最佳实践/正确的方法来实现这个?