1

我有一个应用程序有几个带有列表视图的活动,从第一个列表视图中的选择决定了第二个列表视图的内容,第二个列表视图决定了第三个的内容,等等。

我想测试第三个列表视图,但由于它需要一个意图,所以列表什么也不返回。为了解决这个问题,我可以手动将意图添加到测试中,这确实意味着它可以工作

public InspectionListActivityTest() {
    super(InspectionListActivity.class);
    Intent i = new Intent();
    i.putExtra("guid", "abcbbf2b-5e14-4cb1-af1b-e3084b45d4cf");
    setActivityIntent(i);
}

正如您从代码中看到的那样,它使用 guid 来确定我想要避免的列表 - 我在测试时经常清除数据库,所以我必须一直更改这个字段。

理想情况下,我想使用 ContentResolver 从另一个表中获取第一个 guid,这意味着我将能够始终在我的测试中提取信息,即

public InspectionListActivityTest() {
    super(InspectionListActivity.class);

    ContentResolver cr = getActivity().getContentResolver();
    Cursor cursor = cr.query(Locations.CONTENT_URI, null, null, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            String guid = cursor.getString(cursor.getColumnIndex(Locations.GUID));
            Intent i = new Intent();
            i.putExtra(IntentFilters.LOCATION.getIntent(), guid);
            setActivityIntent(i);
        }
    }
}

但是,我在 getActivity() 方法上得到了一个 nullpointerexception,而且我似乎无法将此 setActivityIntent 放在其他任何地方。

4

2 回答 2

0

可以做,就是有点乱。基本上从我想要的数据库中获取了 guid,为原始测试类创建了一个新的意图,将 guid 附加到意图,然后启动了意图。

public void setUp() throws Exception {
     super.setUp(); 

    solo = new Solo(getInstrumentation(), getActivity());

    activity = getActivity();

    UsefulFunctions.insertDummyData(getActivity());

    ContentResolver cr = getActivity().getContentResolver();
    Cursor cursor = cr.query(Locations.CONTENT_URI, null, null, null, null);

    if (cursor != null) {
        if (cursor.moveToFirst()) {
            guid = cursor.getString(cursor.getColumnIndex(Locations.GUID));

        }
    }

    solo.goBack(); 

    Intent i = new Intent(activity.getApplicationContext(), InspectionListActivity.class);
    i.putExtra(IntentFilters.LOCATION.getIntent(), guid);
    setActivityIntent(i);
    activity.startActivity(i); 


}

在某种程度上,从我的第一个列表开始,然后让 Robotium 在列表中“点击”一直到我想要的屏幕更容易,即

solo.clickInList(0);

// Locations
solo.clickInList(0);

ListView ls = solo.getCurrentListViews().get(0);

solo.waitForActivity("InspectionListActivity");
于 2013-04-03T11:27:44.520 回答
0

这一切都应该在setup()您的测试方法中完成,而不是在其构造函数中。测试的构造函数是无用的,应该保持不变。

于 2013-03-25T14:23:12.263 回答