我想知道如何使用我的JUnit测试反射来访问私有内部类的私有字段。使用反射访问私人内部类字段
这里是什么,我需要一个例子:
public class A
{
private Map<Integer, InnerClass> objectMap = new TreeMap<Integer, InnerClass>.descendingMap();
private class InnerClass
{
private int fieldOne
private int fieldTwo
}
}
在这个例子中,我希望访问在
我已经试过了A的实例fieldOne和fieldTwo的值以下:
A instanceA = new A();
Field privateObjectMapField = A.class.getDeclaredField("objectMap");
privateObjectMapField.setAccessible(true);
NavigableMap<Integer, Class<?>> fieldValue = (NavigableMap<Integer, Class<?>>) privateObjectMapField.get(instanceA);
// 5 is a key in the map so this should set declaredClass to an instance of InnerClass
Class<?> declaredClass = fieldValue.get(5).getClass();
Field fieldOne = declaredClass.getDeclaredField("fieldOne");
fieldOne.setAccessible(true);
Assert.assertEquals(100, fieldOne.getInt(declaredClass));
在这种情况下,它crashses在:Class<?> declaredClass = fieldValue.get(5).getClass();
出现错误:
java.lang.ClassCastException: com.test.A$InnerClass cannot be cast to java.lang.Class
有没有人知道这里有什么问题?
我希望这个例子很清楚。
感谢
InnerClass是私人的,所以我的JUnit类无法看到它 – sam 2014-10-08 21:59:38
所以也许你必须改变你的类结构,因为在这个例子中,InnerClass不能被测试/达到。 – ToYonos 2014-10-08 22:01:40