有没有办法获得android中Junit测试的Actionbar项目的参考?
如何在android中为actionbar项目编写junit测试用例?有没有办法获取它的引用以在其上执行单击事件?我通过创建自己的自定义MenuItem类并手动调用活动的OnOptions ItemSelected(MenuItem item)来解决这个问题。有没有办法获得android中Junit测试的Actionbar项目的参考?,android,testing,junit,android-actionbar,Android,Testing,Junit,Android Actionbar,如何在android中为actionbar项目编写junit测试用例?有没有办法获取它的引用以在其上执行单击事件?我通过创建自己的自定义MenuItem类并手动调用活动的OnOptions ItemSelected(MenuItem item)来解决这个问题。 对于Junit测试,还有其他合适的方法吗?我正在使用ActionBarSherlock提供的ActionBar,遇到了这个问题。我发现最好的方法是: 在测试活动中,保留在CreateOptions菜单中传递的菜单对象的实例,并使其可供测试
对于Junit测试,还有其他合适的方法吗?我正在使用ActionBarSherlock提供的ActionBar,遇到了这个问题。我发现最好的方法是:
private void clickOnMenuItem(int menuItemId, Instrumentation instruments, Menu menuInstance) {
final Integer itemId = menuItemId;
final Menu menu = menuInstance;
instruments.runOnMainSync(new Runnable() {
@Override
public void run() {
menu.performIdentifierAction(itemId, 0);
}
});
}您可以像这样模拟单击ActionBar项目:
public void testButton(){
final View view = activity.findViewById(com.example.R.id.button1);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
view.requestFocus();
view.callOnClick();
}
});
}
在下面的示例中,我能够检索操作栏的导航选项卡按钮(native或ActionBarSherlock)。然后我用TouchUtils单击它们。单击视图()
试试看{
//正在尝试动态获取ActionBar视图“@id/android:action\u bar\u container”
整数剩余=
a、 getResources().getIdentifier(“action\u bar\u container”、“id”、“android”);
查看actionBarContainer=a.findViewById(剩余);
//类“com.android.internal.widget.ActionBarContainer”必须在
//此测试项目的类路径,以便能够调用
//运行时的方法“getTabContainer”
方法getTabContainer=
com.android.internal.widget.ActionBarContainer.class.getMethod(“getTabContainer”,
(类别[])空;
水平滚动视图选项卡容器=
(HorizontalScrollView)getTabContainer.invoke(actionBarContainer,(Object[])null);
return((视图组)tabContainer.getChildAt(0)).getChildAt(tabIndex);
}捕获(例外e){
//试着和SherlockActionBar打交道
com.actionbarsherlock.internal.widget.ActionBarContainer ActionBarContainer=
(com.actionbarsherlock…)a.findViewById(R.id.abs\u action\u bar\u容器);
水平滚动视图选项卡容器=
(HorizontalScrollView)actionBarContainer.getTabContainer();
return((视图组)tabContainer.getChildAt(0)).getChildAt(tabIndex);
}
}
使用robotium.jar库
import com.jayway.android.robotium.solo.Solo;
private Solo solo;
this.solo = new Solo(getInstrumentation(),getActivity());
//R.id.menu_action_signup Menu Iten id.
this.solo.clickOnView(this.solo.getView(R.id.menu_action_signup));
在尝试测试我的Actionbar List-Navigation时也会遇到同样的问题。实际上,这与在Android中获取引用的方式是一样的,唯一需要记住的是,这些测试运行在不同的命名空间中,因此您必须使用原始应用程序的完整命名空间。请注意:
callOnClick()
是在Api级别15中添加的,因此在旧版本中不可用。另一种选择是performClick()
。我在浏览视图层次结构时也有类似的想法,但由于软件包名的原因出现了问题,android名称似乎工作得很好,谢谢。另外请注意,如果有一些视图显示在你的应用程序上,你也可以通过这种方式访问它们,只需找到正确的包名。您似乎也可以通过这种方式访问通知栏元素。
import com.jayway.android.robotium.solo.Solo;
private Solo solo;
this.solo = new Solo(getInstrumentation(),getActivity());
//R.id.menu_action_signup Menu Iten id.
this.solo.clickOnView(this.solo.getView(R.id.menu_action_signup));