我想知道如何使用我的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