如何测试菜单

cem*_*ent 12 java junit android unit-testing

我需要通过单元测试来覆盖菜单功能,但是我很难获得Menu对象.

以下测试用例失败(mMenu为空):

sendKeys(KeyEvent.KEYCODE_MENU);
mMenu = (Menu) mActivity.findViewById(com.###.###.R.id.main_menu);
assertNotNull(mMenu);
Run Code Online (Sandbox Code Playgroud)

请指教.谢谢.

Dan*_*Dan 22

我遇到了同样的场景,并在我的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();
...
Run Code Online (Sandbox Code Playgroud)

这段代码做了三件事:

  1. 单击菜单选项,
  2. 确保在单击菜单选项后转到相应的活动,并且
  3. 完成已启动的活动(对于此后的测试非常重要).

我希望这有帮助.