如何在 ApplicationTestCase 中为片段设置活动 - NoSuchFieldException:SupportLibrary v4-23.0.0 中的 mActivity

Posted

技术标签:

【中文标题】如何在 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 【发布时间】:2015-11-16 20:05:27 【问题描述】:

随着支持库 v4 从 22.2.0 更新到 23.0.0 版本,mActivity 字段已在 Fragment.java 类中消失。在我看来,它似乎被mHost 类型为FragmentHostCallback 所取代(抽象,实现是HostCallbacks,即嵌套在FragmentActivity 中)

我正在使用单元测试对我的所有片段进行大量测试。之前,我在测试类的构造函数中创建了新的 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,因为片段确实没有任何活动。

任何想法如何解决? 度过美好的一天, 康斯坦丁

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于如何在 ApplicationTestCase 中为片段设置活动 - NoSuchFieldException:SupportLibrary v4-23.0.0 中的 mActivity的主要内容,如果未能解决你的问题,请参考以下文章

在QGIS中如何添加天地图的WMTS

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

如何在Allegro中测量距离

如何在Allegro中测量距离

如何在Vue中嵌入React组件?如何在React中嵌入Vue组件?

如何在Unity中截图