如何在 Robolectric 中测试选项菜单项的可见性? [英] How to test an Options Menu Item's visibility in Robolectric?

查看:37
本文介绍了如何在 Robolectric 中测试选项菜单项的可见性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想声明菜单项的可见性.但是,我的菜单项总是返回 true.我正在使用以下代码来扩充我的菜单.

I would like to assert the visibility of menu items. However, my menu items always returns true. I am using the following code to inflate my menu.

    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());

我做错了什么吗?

推荐答案

我的 OptionsMenu 有两个 MenuItem,其中的一个 (Sort>) 有自己的 subMenu,有两个项目.

My OptionsMenu has two MenuItems, which on of them (Sort) has its own subMenu with two items.

这是我用于 OptionsMenu 可见性的 Robolectric 测试代码:

Here's my Robolectric test code for OptionsMenu visibility:

@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,而不是线:

If you don't use Butterknife, instead of line:

 Toolbar toolbar = ButterKnife.findById(mActivity, R.id.toolbar);

使用

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

我使用的是 Robolectric 3.1.

I'm using Robolectric 3.1.

希望能帮到你

这篇关于如何在 Robolectric 中测试选项菜单项的可见性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆