android 列表视图的仪器测试

android instrumentation test for listview

我写了一个用于执行列表视图测试的代码(即,我们可以检查项目在列表视图中的位置,当我们点击列表中的项目时显示 toast messame)。当我们单击 android 中的列表项时,我想移动到另一个 activity。

public class MainActivityTest {

    @Rule
    public ActivityTestRule<MainActivity> main = new ActivityTestRule<MainActivity>(MainActivity.class) {
        @Override
        protected void beforeActivityLaunched() {
            Intents.init();
            super.beforeActivityLaunched();
        }

        @Override
        protected void afterActivityFinished() {
            super.afterActivityFinished();
            Intents.release();
        }
    };
}

这里我写了一个测试来计算列表中的项目数

@Test
    public void testShouldLaunchTheMainActivityAndFindItemsInTheList() throws Exception {
        ListView listview = (ListView) main.getActivity().findViewById(R.id.PhoneVideoList);

        assertThat((int) listview.getCount(), is(61));
    }

这里我写了一个测试来执行点击列表项

@Test
    public void testShouldTestTheItemNameInTheList() throws Exception {
        ListView listview = (ListView) main.getActivity().findViewById(R.id.PhoneVideoList);
        listview.performItemClick(listview.getChildAt(1), 1, listview.getAdapter().getItemId(1));
        listview.performItemClick(listview.getChildAt(4), 4, listview.getAdapter().getItemId(4));
        listview.performItemClick(listview.getChildAt(10), 10, listview.getAdapter().getItemId(10));
    }

    @Test
    public void testShouldShowTheItemDetailWhenAnItemIsClicked() {
        Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
        final ListView listview = (ListView) main.getActivity().findViewById(R.id.PhoneVideoList);

        instrumentation.runOnMainSync(new Runnable() {
            @Override
            public void run() {
                int position = 0;
                listview.performItemClick(listview.getChildAt(position), position, listview.getAdapter().getItemId(position));

                Log.e("in on click", "on click");
            }
        });

        Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(VideoPlay.class.getName(), null, false);
        Activity itemDetailActivity = instrumentation.waitForMonitorWithTimeout(monitor, 5000);

       /* TextView detailView = (TextView) itemDetailActivity.findViewById(R.id.item_detail);
        assertThat(detailView.getText().toString(), is("Android"));*/
    }

}

现在我想知道当我们点击列表项时如何移动到下一个activity

使用机器人:

1。在应用 gradle:

中添加以下依赖项
testCompile 'junit:junit:
androidTestCompile 'junit:junit:4.12'
androidTestCompile 'com.jayway.android.robotium:robotium:5.4.+'

2。将点击侦听器添加到开始新的列表项 activity 3。添加以下测试

public class ListViewClickTest extends ActivityInstrumentationTestCase2<YourActivity> {

    protected final CountDownLatch signal       = new CountDownLatch (1);
    protected Context              context;
    protected Activity         activity;
    protected Solo                 solo;

    public ListViewClickTest () {

        super (YourActivity.class);
    }

    @MediumTest
    public void testListViewClick () {

        waitForTime (4); //time to wait till your network request completes if data is being fetched from server, ignore otherwise

        solo.clickInList (0); //position of list view item

        waitForTime (50);
    }

    @Override
    protected void setUp () throws Exception {

        super.setUp ();

        this.context = getInstrumentation ().getTargetContext ();

        prepareTestData ();

        activity = getActivity ();

        solo = new Solo (getInstrumentation (), activity);
    }

    protected void waitForTime (long seconds) {

        try {
            signal.await (seconds, TimeUnit.SECONDS);
        }
        catch (InterruptedException e) {
            e.printStackTrace ();
        }
    }

    protected void prepareTestData () {

        //Prepare test data if any
    }

}