Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 机器人测试菜单_Android_Unit Testing_Robolectric - Fatal编程技术网

Android 机器人测试菜单

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

我目前正在学习Robolectric来测试Android,我在获取应用程序的菜单时遇到了困难。 现在,Robolectric的
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()。非常感谢。