在Robolectric中使用savedInstanceState Bundle测试Fragment的onCreate方法?

时间:2013-12-31 02:54:58

标签: android testing android-fragments robolectric

我有一个带有onCreate方法的Fragment,它使用传入的savedInstanceState Bundle做一些事情。我正在使用Robolectric创建一个Activity并使用Activity的FragmentManager启动Fragment。

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

我希望Robolectric有一个影子碎片让我直接设置捆绑。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果您使用Robolectric 2.x,则可以将Bundle传递给活动:

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 :(得分: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);