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

时间:2015-08-23 08:29:20

标签: android unit-testing android-fragments android-support-library

随着支持库v4从22.2.0更新到23.0.0版本,mActivity字段已经进入Fragment.java类。从我看到的,似乎被mHost替换为类型为FragmentHostCallback(抽象,实现为HostCallbacks,嵌套在FragmentActivity

我正在通过单元测试对我的所有片段进行大量测试。之前,我在测试类的构造函数中创建了新的Activity(扩展了AbstractApplicationTest),做了一些调整(比如附加上下文等)。然后通过反射将这个新的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,因为片段确实没有活动。

任何想法如何才能成功? 祝你有个美好的一天, 康斯坦丁

1 个答案:

答案 0 :(得分:0)

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

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