Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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测试项目中获取对ActionBar MenuItem的引用_Android_Android Menu_Android Testing - Fatal编程技术网

如何在Android测试项目中获取对ActionBar MenuItem的引用

如何在Android测试项目中获取对ActionBar MenuItem的引用,android,android-menu,android-testing,Android,Android Menu,Android Testing,为了单元测试的目的,我想从活动的ActionBar中获取对MenuItem的引用 @Override protected void setUp() throws Exception{ super.setUp(); viewContacts = getActivity(); addContactsBtn = (MenuItem)viewContacts.findViewById(R.id.action_add); searchBtn = (MenuItem)vie

为了单元测试的目的,我想从活动的ActionBar中获取对MenuItem的引用

@Override
protected void setUp() throws Exception{
    super.setUp();
    viewContacts = getActivity();

    addContactsBtn = (MenuItem)viewContacts.findViewById(R.id.action_add);
    searchBtn = (MenuItem)viewContacts.findViewById(R.id.action_search);

}
其中,action_add和action_search在my menu.xml文件中定义如下

<item
    android:id="@+id/action_search"
    android:orderInCategory="0"
    android:showAsAction="always"
    android:icon="@drawable/ic_action_search"
    android:title="@string/action_search"/>
<item 
    android:id="@+id/action_add"
    android:orderInCategory="1"
    android:showAsAction="always"
    android:icon="@drawable/ic_action_add"
    android:title="@string/action_add"/>

测试用例抛出ClassCastException-

java.lang.ClassCastException: com.android.internal.view.menu.ActionMenuItemView无法强制转换为 android.view.MenuItem位于 com.example.simplecontacts.test.ViewContactsTest.setUp(ViewContactsTest.java:24) 在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)上 在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)中 在 onStart(InstrumentationTestRunner.java:555) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)


我研究了获取菜单项引用的方法。通常的方法是通过传递到OnOptions ItemSelected、OnPrepareOptions Menu方法中的Menu/MenuItem参数。这在应用程序项目本身中是完全合乎逻辑的,但是如何在测试项目中获得MenuItem引用呢

事实证明,将它们转换为视图对象就足以进行单元测试了。所以代码是这样的

addContactsBtn = (View)viewContacts.findViewById(R.id.action_add);
searchBtn = (View)viewContacts.findViewById(R.id.action_search);

哇!没想到会有效果,但确实如此。只需在具有菜单项id的活动上调用
findViewById(int-id)
,就可以完成任务!