Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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中Junit测试的Actionbar项目的参考?_Android_Testing_Junit_Android Actionbar - Fatal编程技术网

有没有办法获得android中Junit测试的Actionbar项目的参考?

有没有办法获得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菜单中传递的菜单对象的实例,并使其可供测试

如何在android中为actionbar项目编写junit测试用例?有没有办法获取它的引用以在其上执行单击事件?

我通过创建自己的自定义MenuItem类并手动调用活动的OnOptions ItemSelected(MenuItem item)来解决这个问题。
对于Junit测试,还有其他合适的方法吗?

我正在使用ActionBarSherlock提供的ActionBar,遇到了这个问题。我发现最好的方法是:

  • 在测试活动中,保留在CreateOptions菜单中传递的菜单对象的实例,并使其可供测试用例访问
  • 在您的测试用例中,您将需要一个对您的工具的引用,以及允许您按id选择菜单项的菜单:

    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));