如何使用AndroidX片段测试来测试选项菜单?

时间:2019-03-27 13:30:19

标签: robolectric androidx-test

设置

  • Robolectric: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));
    }

在AndroidX中执行类似操作(不使用espresso)的API是什么? 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));

        });

0 个答案:

没有答案