gpt4 book ai didi

java - 是否可以出于测试目的将类包私有(private)化

转载 作者:行者123 更新时间:2023-11-30 08:34:56 27 4
gpt4 key购买 nike

我有一个类将执行一些复杂的操作,涉及像这样的一些计算:

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 还没有。

从这个意义上说,你只能通过“约定”来解决这个问题;喜欢:

  1. 添加 java-doc(或非 javadoc 注释)以标记“非私有(private)”内容以用于测试目的
  2. 确保您的包裹中其他人应该使用的东西总是在团队中携带public

换句话说:因为你只能“要求”人们忽略某些部分,你只需确保“真正公开”的东西被标记为这样,并始终如此记录;你团队中的每个人都明白:其他任何事情都不感兴趣;并且应该被视为“私有(private)实现”的细节。

关于java - 是否可以出于测试目的将类包私有(private)化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38565294/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com