Переход от FragmentController к FragmentScenario
Я использую robolectric и обновляю свои фрагменты поддержки до фрагментов androidx. Это означает обновление тестов, использующих FragmentController<>, до рекомендованного FragmentScenario.
С помощью FragmentController я мог запустить его и позвонить controller.get()
чтобы получить фактический фрагмент и напрямую управлять им, делая публичные вызовы. Есть ли способ сделать это с помощью FragmentScenario и получить прямой доступ к экземпляру androidx.Fragment?
Причина, по которой я хочу вызвать общедоступный метод напрямую, заключается в том, что действие, которое содержит списки фрагментов для намерения и вызывает метод для содержащегося в нем фрагмента, и я хочу протестировать связанное с ним поведение.
1 ответ
Ответ - использовать FragmentScenario.onFragment(). Это позволяет вам выполнять действие непосредственно в потоке пользовательского интерфейса фрагмента, давая вам ссылку на фрагмент.
например
FragmentScenario<MyCustomFragment> controller = FragmentScenario.launch(MyCustomFragment.class);
controller.onFragment(fragment -> {
fragment.myCustomFragMethod1();
fragment.myCustomFragMethod2();
}
// assertions here, testing that myCustomFragMethod1() worked.