我想断言菜单项的可见性。 但是,我的菜单项始终返回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());
我做错了吗?
答案 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。
希望它会有所帮助