是否可以将类包私有用于测试目的

时间:2016-07-25 10:26:47

标签: java testing

我有一个类会执行一些涉及某些计算的复杂动作:

public class ComplexAction {

    public void someAction(String parameter){
        ComplexActionEvaluator evaluator = new ComplexActionEvaluator();
        int value = evaluator.eval(parameter);
        //some other actions
    }

    static class ComplexActionEvaluator implements Evaluator{
        public int eval(String parameter){
            //evaluation
        }
    }
}

//package-private, uses only for Actions
interface Evaluator{
    int eval(String parameter);
}

由于评估者可能包含一些复杂的逻辑,我想为它编写测试。但由于ComplexActionEvaluator特定于ComplexAction我执行私有而不是包私有。但这会使其无法进行测试。

首先出现在我脑海中的只是为了让它成为默认访问权限。但默认访问只是为了进行测试。

我认为,如果决定使用哪种访问修饰符会因测试而产生偏差,那就不太好了。也许我做错了什么或者这是一种常见的做法?

1 个答案:

答案 0 :(得分:2)

也没有简单的答案;因为你是完全正确的:有意义的东西(只允许访问以进行测试)并不适用于Java。我认为其他更新的语言实际上引入了一些概念,这些概念允许您将方法/类标记为仅限私有,但可用于测试代码&#34 ;;但是Java还没有。

从这个意义上说,你只能通过" convention&#34 ;;像:

  1. 添加java-doc(或非javadoc注释)以标记"非私有"用于测试目的
  2. 确保您的其他人应该使用的始终在团队中的公开
  3. 换句话说:因为你只能"问"人们忽略某些部分,你只需要确保"真的公开"事物被标记为这样,并且总是记录在案;你团队中的每个人都明白:其他任何事情都没有意义;应该被视为"私人实施"细节。