Тестирование метода onCreate фрагмента с помощью пакета saveInstanceState Bundle в Robolectric?

У меня есть фрагмент с методом onCreate, который кое-что делает с переданным в saveInstanceState Bundle. Я использую Robolectric для создания Activity и запуска фрагмента с помощью FragmentManager Activity.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как вставить пакет saveInstanceState из тестового кода, чтобы проверить путь кода, который его использует.

Я надеялся, что у Robolectric есть теневой фрагмент, который позволит мне установить связку напрямую.

Есть идеи?


person DevDevDev    schedule 31.12.2013    source источник
comment
Какую версию Robolectric вы используете?   -  person Eugen Martynov    schedule 31.12.2013


Ответы (2)


Если вы используете 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();
person Eugen Martynov    schedule 31.12.2013
comment
Это просто не работает для меня. Я передаю пакет, но когда onCreate вызывается для моего фрагмента, пакет saveInstanceState Bundle всегда равен нулю. - person RandomEngy; 08.04.2014

Я только что использовал отражение и установил поле package-private mSavedFragmentState для пакета, который я хотел получить.

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

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

    SupportFragmentTestUtil.startFragment(fragment);
person Alvaro Gutierrez Perez    schedule 15.04.2016