Как проверить меню опций с помощью теста фрагмента AndroidX? - PullRequest
1 голос
/ 27 марта 2019

Настройка

  • Робоэлектрик: 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));

        });
...