如何在 Robolectric 中测试选项菜单项的可见性? [英] How to test an Options Menu Item's visibility in Robolectric?
本文介绍了如何在 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 MenuItem
s, 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屋!
查看全文