说我有以下课程:
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;
}
}
我似乎记得曾经在某处读过为了测试而添加方法(而不是重构有问题的类),这是值得瞧不起的。
答案 0 :(得分:1)
在这个特定示例中,您实际上是通过使其可测试来改进您的类设计。
这个新的单元测试让你从ProblematicObject
的客户端的角度思考,并让你提供一种注入依赖的方法。