如何测试ListActivity?

我是Android开发以及测试驱动开发的新手。 我想为以下ListActivity编写unit testing:

public class TrendsMainActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] list_items = getResources().getStringArray(R.array.trend_menu_names); setListAdapter(new ArrayAdapter(this, R.layout.main, list_items)); } @Override protected void onListItemClick(ListView listView, View view, int position, long id) { Intent intent = null; switch(position) { case 0: intent = new Intent(this, TrendingActivity.class); break; case 1: intent = new Intent(this, SearchActivity.class); break; case 2: intent = new Intent(this, TimelineActivity.class); break; } if(intent != null) { startActivity(intent); } else { Log.e(getClass().getSimpleName(), "There was an error retrieving request."); } }} 

我已经搜索了所有可以找到的文档,但是我无法弄清楚如何测试这个Activity。 onListItemClick方法尚未完成,但它提供了我想要实现的目标。 我想测试单击ListView中的第一项,并测试是否正在启动正确的Activity。

我怎么能做到这一点?

编辑:我希望我的测试“点击”ListView中的项目。 然后我想断言活动开始是正确的活动(例如,单击ListView项目0专门启动TrendingActivity)

我应该说,如果你申请TDD,你应该开始编写测试而不是应用程序。

无论如何, Android应用程序测试指南在第3章中包含两个结合在一起的示例,可以为您提供所需的解决方案。 我们的想法是使用ActivityMonitor来validation预期的活动是否已经开始。

 @UiThreadTest public void testListItemClickStartsActivity() { final Instrumentation inst = getInstrumentation(); final IntentFilter intentFilter = new IntentFilter(); // here add conditions to your filter, ie intentFilter.addAction() ActivityMonitor monitor = inst.addMonitor(intentFilter, null, false); assertEquals(0, monitor.getHits()); // here perform desired click on list monitor.waitForActivityWithTimeout(5000); assertEquals(1, monitor.getHits()); inst.removeMonitor(monitor); }