为单元测试添加受保护方法的良好做法?

时间:2017-10-13 17:54:05

标签: java unit-testing junit dependency-injection

说我有以下课程:

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;
    }

}

我似乎记得曾经在某处读过为了测试而添加方法(而不是重构有问题的类),这是值得瞧不起的。

1 个答案:

答案 0 :(得分:1)

在这个特定示例中,您实际上是通过使其可测试来改进您的类设计。

这个新的单元测试让你从ProblematicObject的客户端的角度思考,并让你提供一种注入依赖的方法。