【问题标题】:How to test a ListActivity?如何测试 ListActivity?
【发布时间】:2011-07-16 04:45:56
【问题描述】:

我是 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.");
    }
}}

我已经搜索了所有我能找到的文档,但我不知道如何测试这个 Activity。 onListItemClick 方法还没有完成,但它给出了我想要完成的想法。我想测试单击 ListView 中的第一项,并测试是否正在启动正确的 Activity。

我怎样才能做到这一点?

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

【问题讨论】:

  • “测试此活动”是什么意思?运行包含列表的应用程序?还是测试代码?
  • 我想对代码进行单元测试。

标签: java android unit-testing


【解决方案1】:

我应该说,如果您正在应用 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);
}

【讨论】:

  • 我拿到了这本书,你做得很好。它对我来说非常方便。我编辑了我原来的问题,使其更具体。我完全有可能没有正确使用活动和列表视图。我试图将第 3 章中的信息拼凑起来,但它似乎只是验证了一个活动是否已启动——而不是什么活动开始了。我错过了什么吗?
  • 如果过滤器匹配多个活动,您可以使用 ActivityMonitor#getLastActivity() [developer.android.com/reference/android/app/… 找出匹配的活动。
  • 如何在列表视图中执行点击。我尝试使用以下代码来执行此操作,但失败了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多