如何在Robolectric中测试包含savedInstanceState Bundle的Fragment的onCreate方法?

4

我有一个带有onCreate方法的Fragment,该方法会对传入的savedInstanceState Bundle进行一些处理。我正在使用Robolectric创建一个Activity,并使用Activity的FragmentManager启动Fragment。

我的问题是,我无法弄清楚如何从测试代码中插入savedInstanceState Bundle以验证使用它的代码路径。

我希望Robolectric有一个影子Fragment,可以让我直接设置bundle。

有什么想法吗?


你使用的是哪个Robolectric版本? - Eugen Martynov
2个回答

0

我最终使用反射并设置包私有字段mSavedFragmentState来接收我想要的Bundle。

    Fragment fragment = new YourFragment();
    Bundle bundle = new Bundle();

    Field field = Fragment.class.getDeclaredField("mSavedFragmentState");
    field.setAccessible(true);
    field.set(fragment, bundle);

    SupportFragmentTestUtil.startFragment(fragment);

0
如果你使用的是Robolectric 2.x,那么你可以将Bundle传递给activity:
Bundle savedBundle = new Bundle();

activity = buildActivity( FragmentActivity.class ).create( savedBundle ).start().resume().get();

MyFragment fragment = new MyFragment();

FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add( fragment, null );
fragmentTransaction.commit();

1
这对我来说根本不起作用。我传递了一个 bundle,但当我的 fragment 上调用 onCreate 时,savedInstanceState Bundle 总是 null。 - RandomEngy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接