如何将 activity 设置为 ApplicationTestCase 中的片段 - NoSuchFieldException:SupportLibrary v4-23.0.0 中的 mActivity

How to set activity to the fragment in ApplicationTestCase - NoSuchFieldException: mActivity in SupportLibrary v4-23.0.0

随着支持库 v4 从 22.2.0 更新到 23.0.0 版本,mActivity 字段已进入 Fragment.java class。据我所见,它似乎被具有类型 FragmentHostCallbackmHost 取代(抽象,实现是 HostCallbacks,嵌套在 FragmentActivity 中)

我正在用单元测试大量测试我的所有片段。之前,我在测试 class(扩展 AbstractApplicationTest)的构造函数中创建了新的 Activity,做了一些调整(比如附加上下文等)。然后通过反射将这个新的 Activity 设置为我要测试的片段的 activity:

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,因为片段确实没有 activity.

有什么解决方法吗? 有一个辉煌的一天, 康斯坦丁

我想通了。 简而言之,使用反射是错误的,我坚持使用 ActivityUnitTestCase。

请在此处找到有关它的完整文章: Unit Test an Android Fragment