【发布时间】:2019-05-17 14:04:27
【问题描述】:
我在尝试对代码进行单元测试时遇到了以下问题。如果我有一个创建实例的类,例如像这样的 getter 方法:
public class Test {
private static Test instance;
private ArrayList<String> arrayList = new ArrayList<String>();
public static Test getInstance() {
return instance;
}
private ArrayList<String> getArrayList() {
return arrayList;
}
}
如果现在我想在测试用例中访问 arrayList,它将失败,因为该列表是由不可访问的私有方法返回的。所以尝试这样的事情是行不通的:
public class AccessTest {
private Test test;
public void accessList(){
test = Test.getInstance();
test.getArrayList();
}
}
因此,无论如何访问 arrayList 的一种方法可能是将可见性更改为受保护。但是没有更好的方法来访问该方法吗?是否真的有必要仅因为需要访问它的测试而使方法受到保护?
【问题讨论】:
-
或包私有。一般来说,您宁愿测试公共 api。如果没有,请使用反射 API 访问私有字段。
-
将
getArrayList()方法设为私有的用例是什么?它只能在类中使用,而不是直接使用arrayList字段对吗? -
不确定是否真的重复,但我的这个answer 提供了一种可能的方法。
-
单元测试是关于单独测试一个单元的行为(一个单元不一定是一个类!),而不是测试它的方法。出于这个原因,通过私有方法测试某些东西没有多大意义,行为是通过(在你的情况下是隐式的)类接口暴露的,所以只有公共方法。一个更现实的例子会提出一个更好的问题。
标签: java