说我有以下课程:
public class ProblematicObject {
public static void methodToTest() {
SomeDependency dep = DependencyGetter.getDependency(SomeDependency.class);
dep.doStuff();
}
}
为了使单元测试更整洁(又避免使用PowerMock),是否可以对此类进行修改和添加方法?这是上面的类的样子:
public class ProblematicObject {
// new
private static SomeDependency dep;
// updated
public static void methodToTest() {
getSomeDependency().doStuff();
}
// new
private SomeDependency getSomeDependency() {
if (this.dep == null) {
return DependencyGetter.getDependency(SomeDependency.class);
}
return dep;
}
// new, only used for testing, not in any impl code
@Deprecated
protected void setDependencyGetter(SomeDependency dep) {
this.dep = dep;
}
}
我似乎记得在某处读过一篇文章,该书为测试而添加方法(而不是重构有问题的类)被忽视了。
最佳答案
在此特定示例中,实际上您正在通过使其可测试来改进类设计。
这项新的单元测试使您从ProblematicObject
客户端的角度进行思考,并使您提供了一种注入依赖关系的方法。