0

隨着支持庫v4的更新從22.2.0更新爲23.0.0版本,mActivity字段已進入Fragment.java類。從我所看到的,它似乎是由mHost有型FragmentHostCallback更換(抽象的,實施是HostCallbacks,嵌套在FragmentActivity如何將活動設置爲ApplicationTestCase中的片段 - NoSuchFieldException:SupportLibrary v4-23.0.0中的mActivity

我大量使用單元測試測試我的所有片段。之前,我在測試類的構造函數中創建了新的Activity(它擴展了AbstractApplicationTest),做了一些調整(如附加上下文等)。然後通過反射設置這一新的活動作爲片段的活動我想測試:

protected void setFragmentActivity(final Fragment fragment) throws NoSuchFieldException, IllegalAccessException { 
    final Field field = Fragment.class.getDeclaredField("mActivity"); 
    field.setAccessible(true); 
    field.set(fragment, activity); 
} 

現在,mActivity不再存在。

爲什麼它很重要:當我正在測試的片段在沒有此設置的情況下調用getActivity()時,我得到null,因爲片段實際上沒有任何活動。

任何想法如何解決? 祝您有個美好的一天, Konstantin

回答

0

我想通了。 簡而言之,用反射去做是錯誤的,我堅持使用ActivityUnitTestCase來代替。

請在這裏找到關於它的完整資料: Unit Test an Android Fragment

相關問題