如何在Android测试项目中获取对ActionBar MenuItem的引用
为了单元测试的目的,我想从活动的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
@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)
,就可以完成任务!