如何测试选项菜单项在Robolectric中的可见性?

时间:2014-03-14 23:56:55

标签: android robolectric

我想断言菜单项的可见性。 但是,我的菜单项始终返回true。 我正在使用以下代码来扩充我的菜单。

    SherlockMenuInflater inflater = new SherlockMenuInflater(activity);
    MenuBuilder menu = new MenuBuilder(activity);
    fragment.onCreateOptionsMenu(menu, inflater);

    System.out.println(menu.findItem(R.id.submit).isVisible() + " " + menu.findItem(R.id.next).isVisible() + " "
            + menu.findItem(R.id.done).isVisible());

    assertEquals(3, menu.size());
    assertFalse(menu.findItem(R.id.submit).isVisible());
    assertTrue(menu.findItem(R.id.next).isVisible());
    assertFalse(menu.findItem(R.id.done).isVisible());

我做错了吗?

1 个答案:

答案 0 :(得分:3)

我的OptionsMenu有两个MenuItem个,其中Sort}有自己的subMenu,有两个项目。

这是Robolectric OptionsMenu可见性的@RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) public class MainActivityTest { private static MainActivity mActivity; @Before public void setMainActivity() { if (mActivity == null) { mActivity = Robolectric.buildActivity(MainActivity.class).create().visible().get(); } } @Test public void checkMainActivityOptionsMenuValues() throws Exception { //get MainActivity.toolbar instance Toolbar toolbar = ButterKnife.findById(mActivity, R.id.toolbar); //get ShadowActivity instance ShadowActivity shadowActivity = shadowOf(mActivity); //call onCreateOptionsMenu using toolbar.menu shadowActivity.onCreateOptionsMenu(toolbar.getMenu()); //assert that OptionsMenu has visible items assertTrue(shadowActivity.getOptionsMenu().hasVisibleItems()); //assert that `Settings` MenuItem is visible assertEquals(shadowActivity.getOptionsMenu().findItem(R.id.action_settings).isVisible(), true); //assert that `Sort` MenuItem is visible assertEquals(shadowActivity.getOptionsMenu().getItem(0).getTitle(), mActivity.getString(R.string.action_sort)); //assert that `Sort` has subMenu with `By Value id` value assertEquals(shadowActivity.getOptionsMenu().getItem(0).getSubMenu().getItem(0).getTitle(), mActivity.getString(R.string.menu_sort_a_z)); //assert that `Sort` has subMenu with `By Joke Length` value assertEquals(shadowActivity.getOptionsMenu().getItem(0).getSubMenu().getItem(1).getTitle(), mActivity.getString(R.string.menu_sort_size)); } } 测试代码:

Butterknife

如果您不使用 Toolbar toolbar = ButterKnife.findById(mActivity, R.id.toolbar); ,而不是行:

 Toolbar toolbar = mActivity.findViewById(R.id.toolbar);

使用

IdentityMapper.class

我正在使用Robolectric 3.1。

希望它会有所帮助