我有一个类将执行一些复杂的操作,涉及像这样的一些计算:
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
的,所以我会将其设为私有(private)而不是包私有(private)。但这会使它无法进行测试。
我首先想到的解决方案就是让它成为默认访问权限。但默认访问权限仅用于测试。
我认为如果通过测试来决定使用哪个访问修饰符是不太好的。也许我做错了什么或者这是一种常见的做法?
也没有简单的答案;因为你是完全正确的:有意义的事情(只允许出于测试目的访问)在 Java 中不起作用。我认为其他较新的语言实际上引入了允许您将方法/类标记为“仅私有(private),但可用于测试代码”的概念;但 Java 还没有。
从这个意义上说,你只能通过“约定”来解决这个问题;喜欢:
- 添加 java-doc(或非 javadoc 注释)以标记“非私有(private)”内容以用于测试目的
- 确保您的包裹中其他人应该使用的东西总是在团队中携带public
换句话说:因为你只能“要求”人们忽略某些部分,你只需确保“真正公开”的东西被标记为这样,并始终如此记录;你团队中的每个人都明白:其他任何事情都不感兴趣;并且应该被视为“私有(private)实现”的细节。
Tôi là một lập trình viên xuất sắc, rất giỏi!