我需要用单元测试来覆盖菜单功能,但是我无法获取菜单对象。
以下测试用例失败了(mMenu为空):
sendKeys(KeyEvent.KEYCODE_MENU);
mMenu = (Menu) mActivity.findViewById(com.###.###.R.id.main_menu);
assertNotNull(mMenu);
请给予建议。谢谢。
我需要用单元测试来覆盖菜单功能,但是我无法获取菜单对象。
以下测试用例失败了(mMenu为空):
sendKeys(KeyEvent.KEYCODE_MENU);
mMenu = (Menu) mActivity.findViewById(com.###.###.R.id.main_menu);
assertNotNull(mMenu);
请给予建议。谢谢。
我遇到了同样的情况,并在我的ActivityInstrumentationTestCase实现中想出了以下(非常简单)的解决方案:
...
ActivityMonitor am = getInstrumentation().addMonitor(LoginActivity.class.getName(), null, false);
// Click the menu option
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
getInstrumentation().invokeMenuActionSync(mActivity, R.id.logout, 0);
Activity a = getInstrumentation().waitForMonitorWithTimeout(am, 1000);
assertEquals(true, getInstrumentation().checkMonitorHit(am, 1));
a.finish();
...
这段代码实现了三个功能:
希望这可以帮到您。
你想要测试什么?是菜单项是否执行正确的操作吗?
你可以调用Activity.openOptionsMenu()来打开菜单,并通过重写onMenu方法之一获取菜单的引用。此时,你可以使用Menu.performIdentifierAction来选择菜单项。
Activity act =launchActivity(intent);
MenuBuilder builder=new MenuBuilder(mInst.getTargetContext());
act.onCreateOptionsMenu(builder);
act.onPrepareOptionsMenu(builder);
Log.i(TAG, "BuilderSize: "+builder.size());
int visible=0;
for(int i=0;i<builder.size();i++)
{
MenuItem item=builder.getItem(i);
if(item.isVisible()&& item.isEnabled())
{
Log.i(TAG, item.getTitle().toString());
visible++;
}
}
act.finish();
使用仪器测试菜单项的按压。
这是我的一个示例测试用例,调用“设置”菜单,启动另一个活动。
public void testCanGoToSettings() {
final MainActivity activity = getActivity();
Instrumentation.ActivityMonitor am = getInstrumentation().addMonitor(ConfigureActivity.class.getName(),
null /* result */, true /* block */);
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
getInstrumentation().invokeMenuActionSync(activity, R.id.menu_settings, 0 /* flags */);
/* if not block in addMonitor() above, then comment out this...
Activity a = getInstrumentation().waitForMonitorWithTimeout(am, 1000);
a.finish();
*/
}