Как проверить меню опций с помощью теста фрагмента AndroidX?
Настроить
- Робоэлектрик: 4.2.1
- Тестирование фрагментов AndroidX: 1.1.0-alpha05
Фон
С AndroidX приходят новые способы тестирования фрагментов:
Источник: https://developer.android.com/training/basics/fragments/testing
Robolectric совместим с AndroidX и намеревается отказаться от функциональности, которая отражает возможности AndroidX.
Источник: http://robolectric.org/androidx_test/
Но в Robolectric вы можете проверить поведение меню опций, например, с помощью чего-то вроде этого (я знаю, что оно выглядит загроможденным, но FragmentController не работает в некоторых случаях):
@Test
public void OnPrepareOptionsMenu_WhenX_ShowsMenuActionsCorrectly() {
setupX();
final Bundle instanceState = new Bundle();
instanceState.putString(FooActivity.ARG_UUID, x.getUuid());
final FooActivity activity = Robolectric.buildActivity(FooActivity.class)
.create(instanceState).start().visible().get();
activity.getSupportFragmentManager().beginTransaction()
.add(R.id.container_x_fragment_details, fragment).commit();
final Context context = fragment.requireContext();
final Menu menu = new RoboMenu(context);
fragment.onCreateOptionsMenu(menu, new MenuInflater(context));
fragment.onPrepareOptionsMenu(menu);
assertThat(menu.findItem(R.id.action_y).isVisible(), is(true));
assertThat(menu.findItem(R.id.action_z).isVisible(), is(true));
}
Что такое API, чтобы сделать что-то подобное (без использования эспрессо) в AndroidX? RoboMenu
Конструкция не очень хорошо работает с AndroidX, и это не работает:
fragmentScenario.onFragment(fragment -> {
final Activity activity = fragment.requireActivity();
assertThat(activity.findViewById(R.id.y).getVisibility(), is(View.VISIBLE));
assertThat(activity.findViewById(R.id.z).getVisibility(), is(View.VISIBLE));
});