说我有以下课程:

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客户端的角度进行思考,并使您提供了一种注入依赖关系的方法。

08-16 08:04