【问题标题】:Android JUnit HorizontalListView performItemClick() not workingAndroid JUnit Horizo​​ntalListView performItemClick()不起作用
【发布时间】:2013-05-21 14:07:08
【问题描述】:

在我的单元测试期间,我想基本上测试一个 Activity 是否通过一个简单的按钮启动,即在 HorizontalListView 中。在之前的单元测试中,我已经成功地开始了新的活动,但是这个活动并没有达到预期的效果。我有一个断言失败,告诉我我想开始的活动仍然是空的。

实际上,当我启动单元测试时,它似乎没有执行点击。我必须我自己在测试期间用我的小指执行它才能通过测试。

为了查看我是否点击了正确的视图,我使用 Logs 来查看我的测试点击了哪个视图以及我真正想要点击的视图:它似乎是正确的视图(正确的 ID、正确的位置和右视图)。所以我认为问题不在于我点击的地方。

我正在测试的 Activity 称为 StudioActivity,我要启动的 Activity 称为 AddBoasterActivity。

我的单元测试方法:

public void testSwitchToAddBoaster(){
    assertTrue(mBoasterPreviewFragment.getWithAddButton());
    ActivityMonitor activityMonitor = getInstrumentation().addMonitor(AddBoasterActivity.class.getName(), null, false);
    mStudioActivity.runOnUiThread(new Runnable() {
        @Override
        public void run(){
            int lPosition = mBoasterPreviewFragment.getAdapter().getCount()-1;
            View lView = mBoasterPreviewFragment.getBoaster().getChildAt(lPosition);

            //HERE ARE LOGS TO SEE IF MY TEST IS PERFORMING 
            //THE CLICK ON THE RIGHT VIEW AT THE GOOD POSITION
            Log.i("TEST POSITION:", ""+lPosition);
            Log.i("TEST ID: ",""+lView.getId());
            Log.i("TEST VIEW: ", ""+lView);
            //AND IT'S THE GOOD VIEW!

          mBoasterPreviewFragment.getBoaster().performItemClick(lView,lPosition,lView.getId());
        }
      });       
    AddBoasterActivity lAddBoasterActivity = (AddBoasterActivity) getInstrumentation().waitForMonitorWithTimeout(activityMonitor,5000);        
    assertNotNull(lAddBoasterActivity); //HERE IS THE FAILURE, THE ACTIVITY HASN'T BEEN STARTED

    mWFBoasterPreviewFragment = new WeakReference<BoasterPreviewFragment>((BoasterPreviewFragment) lAddBoasterActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_preview));
    mBoasterPreviewFragment = mWFBoasterPreviewFragment.get();    
    assertNotNull(mBoasterPreviewFragment);

    lAddBoasterActivity.finish();
}    

OnItemClickListener:

mBoaster.setAdapter(mAdapter);
    if (withAddBoasterButton) {
        mBoaster.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (position == mAdapter.getCount() - 1) {
                    //HERE IS THE CURRENT VIEW
                    Log.i("POSITION:", ""+position);
                    Log.i("ID: ",""+id);
                    Log.i("VIEW: ", ""+view);
                    Intent intent = new Intent(getActivity().getApplicationContext(), AddBoasterActivity.class);
                    intent.putExtra(AddBoasterActivity.EXTRA_BOASTER_SELECTED, mSelectedUsers);
                    intent.putExtra(AddBoasterActivity.EXTRA_IS_STREAM, isStream);
                    startActivityForResult(intent, AddBoasterActivity.REQUEST_CODE_ACTIVITY);
            }
        }});
    }

手动执行点击对于必须自动化的测试来说是相当尴尬的。因此,如果有人知道为什么会这样。

感谢您的帮助!

【问题讨论】:

    标签: android junit onitemclick


    【解决方案1】:

    好吧,我终于找到了……只是睡了一晚,还好。我应该早点考虑的,但是 Robotium 已经帮助了我好几次了。

    如果您还没有测试,请查看:https://code.google.com/p/robotium/

    下面是 Robotium 的样子:

    public void testSwitchToAddBoaster(){
        Solo solo = new Solo(getInstrumentation(), getActivity());
        getInstrumentation().waitForIdleSync();
        ActivityMonitor activityMonitor = getInstrumentation().addMonitor(AddBoasterActivity.class.getName(), null, false);
        assertTrue(mBoasterPreviewFragment.getWithAddButton());
    
        int lPosition = mBoasterPreviewFragment.getAdapter().getCount()-1;
        View lView = mBoasterPreviewFragment.getBoaster().getChildAt(lPosition);
    
        solo.clickOnView(lView); //SIMPLE CLICK
    
        AddBoasterActivity lAddBoasterActivity = (AddBoasterActivity) getInstrumentation().waitForMonitorWithTimeout(activityMonitor,5000);        
        assertNotNull(lAddBoasterActivity); //NOW THE ACTIVITY IS STARTED
    
        mWFBoasterPreviewFragment = new WeakReference<BoasterPreviewFragment>((BoasterPreviewFragment) lAddBoasterActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_preview));
        mBoasterPreviewFragment = mWFBoasterPreviewFragment.get();    
        assertNotNull(mBoasterPreviewFragment);
    
        lAddBoasterActivity.finish();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      相关资源
      最近更新 更多