如果要测试的类的某个公共方法使用私有字段,那么我们可以在JUnit测试方法中模拟该私有字段吗? 否则,如果您不能访问私有字段,则无法使用或修改其值并将其传递给JUnit测试以查看不同的结果。
答案 0 :(得分:2)
使用反射(以下示例不是JUnit测试,但它的工作方式完全相同)。
使用private
变量和print()
方法的示例类,以确保set
成功。
public class stackoverflow2 {
private int testPrivate = 10;
public void print(){
System.out.println(testPrivate);
}
}
使用反射以及get
和set
方法调用类。请注意,设置testPrivateReflection
不会改变testPrivate
,因为它是值的本地副本,因此我们使用set
。
public class stackoverflow {
public static void main(String[] args) throws IllegalArgumentException,
IllegalAccessException, NoSuchFieldException {
stackoverflow2 sf2 = new stackoverflow2();
Field f = sf2.getClass().getDeclaredField("testPrivate");
f.setAccessible(true);
int testPrivateReflection = (int)f.get(sf2);
System.out.println(testPrivateReflection);
f.set(sf2, 15);
sf2.print();
}
}