如何在 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?