如何存取一個 class 的 protected / private member,
在加了好幾個 getter method 後,
參照下面連結後,
http://stackoverflow.com/questions/1771744/accessing-private-variables-in-java-via-reflection
最終整理出一個目前較適合自己的寫法。(兼顧彈性與安全性)
這樣每一個需要測的 class 只需要加一個
getInstanceField() 就可以了。public class SomeActivity extends Activity {
protected ListView mListView;public static Object getInstanceField(Object instance, String fieldName) {// Disable this function if it is a commericial buildif ( true == COMMERICIAL_BUILD ) {return null;}Object obj = null;try {Field field = SomeClass.class.getDeclaredField(fieldName);obj = field.get(instance);} catch (Exception e) {e.printStackTrace();}return obj;
}
}
至於在 Unit Test 那兒,就可以寫成
SomeActivity activity = getActivity(); ListView listView = (ListView) SomeActivity.getInstanceField(activity, "mListView");
還蠻方便。
P.S. 這方法似乎沒辦法捉到 superclass 的 member。需要在 superclass 加同樣的一段code


















































