如何将 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。据我所见,它似乎被具有类型 FragmentHostCallback
的 mHost
取代(抽象,实现是 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
随着支持库 v4 从 22.2.0 更新到 23.0.0 版本,mActivity
字段已进入 Fragment.java class。据我所见,它似乎被具有类型 FragmentHostCallback
的 mHost
取代(抽象,实现是 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