我有一个带有列表视图的多个活动的应用程序,第一个列表视图中的选择决定了第二个列表视图的内容,第二个列表视图决定了第三个列表视图的内容等。
我想测试第三个列表视图,但因为它需要一个intent,所以列表什么都不返回。为了解决这个问题,我可以手动将意图添加到测试中,这意味着它可以正常工作
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放在其他地方。
答案 0 :(得分:0)
这一切都应该在测试的setup()
方法中完成,而不是在它的构造函数中完成。测试的构造者是无用的,应该保持不变。
答案 1 :(得分:0)
可以做到,但有点乱。基本上从我想要的数据库中获取了guid,为原始测试类创建了一个新的意图,将guid附加到intent上,然后启动了intent。
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");