Android 机器人测试菜单
我目前正在学习Robolectric来测试Android,我在获取应用程序的菜单时遇到了困难。 现在,Robolectric的Android 机器人测试菜单,android,unit-testing,robolectric,Android,Unit Testing,Robolectric,我目前正在学习Robolectric来测试Android,我在获取应用程序的菜单时遇到了困难。 现在,Robolectric的getOptionsMenu()正在返回null。代码本身工作正常,但测试总是为选项菜单返回null 我的代码如下 @Test public void onCreateShouldInflateTheMenu() { Intent intent = new Intent(); intent.setData(Uri.EMPTY); DetailAct
getOptionsMenu()
正在返回null。代码本身工作正常,但测试总是为选项菜单返回null
我的代码如下
@Test
public void onCreateShouldInflateTheMenu() {
Intent intent = new Intent();
intent.setData(Uri.EMPTY);
DetailActivity dActivity = Robolectric.buildActivity(DetailActivity.class, intent).create().get();
Menu menu = Shadows.shadowOf(dActivity).getOptionsMenu(); // menu is null
MenuItem item = menu.findItem(R.id.action_settings); // I get a nullPointer exception here
assertEquals(menu.findItem(R.id.action_settings).getTitle().toString(), "Settings");
}
有人知道为什么Robolectric返回空值吗?我是否遗漏了任何依赖项?在
oncreate
之后将调用oncreateoptions菜单
,以确保您可以查看菜单并重试
Robolectric.buildActivity(DetailActivity.class, intent).create().resume().get();
或者,您可以确保活动可见
Robolectric.buildActivity(DetailActivity.class, intent).create().visible().get();
这是什么意思
证明,在真正的Android应用程序中
直到onCreate()之后的某个时间,“活动”才附加到窗口
被称为。在此之前,活动的视图不会报告为
看得见的这意味着您不能单击它们
(除其他意外情况外)
行为)。“活动”的层次结构附加到“活动”上的窗口
活动上onPostResume()之后的设备或模拟器。而不是
假设应在何时更新可见性,
Robolectric在编写时将权力交给了开发人员
测试
那你什么时候叫它<代码>无论何时与视图交互
活动内部。像roblectric.clickOn()这样的方法需要
视图可见并正确附着,以便正常工作。你
应该在create()之后调用visible()
对我帮助最大的是.visible()而不是.resume()。非常感谢。