我有一个类会执行一些涉及某些计算的复杂动作:
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
我执行私有而不是包私有。但这会使其无法进行测试。
首先出现在我脑海中的只是为了让它成为默认访问权限。但默认访问只是为了进行测试。
我认为,如果决定使用哪种访问修饰符会因测试而产生偏差,那就不太好了。也许我做错了什么或者这是一种常见的做法?
答案 0 :(得分:2)
也没有简单的答案;因为你是完全正确的:有意义的东西(只允许访问以进行测试)并不适用于Java。我认为其他更新的语言实际上引入了一些概念,这些概念允许您将方法/类标记为仅限私有,但可用于测试代码&#34 ;;但是Java还没有。
从这个意义上说,你只能通过" convention&#34 ;;像:
换句话说:因为你只能"问"人们忽略某些部分,你只需要确保"真的公开"事物被标记为这样,并且总是记录在案;你团队中的每个人都明白:其他任何事情都没有意义;应该被视为"私人实施"细节。