如何测试ListActivity?

时间:2011-07-16 04:45:57

标签: java android unit-testing

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

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<String>(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.");
    }
}}

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

我该如何做到这一点?

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

1 个答案:

答案 0 :(得分:4)

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

无论如何,Android Application Testing Guide在第3章中包含两个结合在一起的例子可以为您提供所需的解决方案。我们的想法是使用ActivityMonitor来验证预期的活动是否已经开始。

@UiThreadTest
public void testListItemClickStartsActivity() {
    final Instrumentation inst = getInstrumentation();
    final IntentFilter intentFilter = new IntentFilter();
    // here add conditions to your filter, i.e. 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);
}