0

我正在尝试为我的 android 项目编写测试类,但在填充列表视图时遇到了一些问题。

我的活动使用 Intents 提供的值对应用程序数据库执行请求:

    final String[] projection = {
             ...
            };

    final String[] selectionArgs={
            String.valueOf(intent_param_1),
            String.valueOf(intent_param_2)
    };
    final String selection = //.... ;

    vAdapter = new CustomCursorAdapter(this, R.layout.da_row, null, from, to,0);

    mListView = new LoaderUtils(vAdapter, projection, selection, selectionArgs, this, uri, null).populateListView(mListView);

LoaderUtils 类实现了LoaderCallbacks,populateListView 方法使用了一个CursorLoader 将DB 数据加载到适配器,并绑定到我的ListView。运行我的应用程序时它工作正常,但是当我尝试实现测试用例时,我遇到了一些问题。

@Override
  protected void setUp() throws Exception {
    super.setUp();

    Intent i = new Intent();
    i.putExtra("intent_param_1", 1);
    i.putExtra("intent_param_2", 1);
    setActivityIntent(i);

    mActivity = getActivity();
    listeActivites = (ListView)mActivity.findViewById(R.id.listview);
    adapter = (CustomCursorAdapter) listeActivites.getAdapter();
  }

public void testInit(){
    Cursor c = adapter.getCursor();
            //...
    }

当我执行我的 testInit 时,适配器返回的光标是空的,而当我使用模拟器“真正”运行我的应用程序时它不是。

问题可能是我的 Intent 初始化错误,或者测试用例不允许使用 Cursor Loaders?因此,如果有人能指出我做错了什么,将不胜感激。谢谢!

4

1 回答 1

0

原因是 CursorLoader 还没有完成。如果您添加一秒钟的睡眠(不是正确的方式),它将起作用。

我目前也在寻找如何最好地使用 CursorLoaders 测试活动。由于我不想添加睡眠代码......必须有更好的方法。

目前正在考虑添加一个我可以在测试中等待的监听器......

于 2013-06-11T03:08:29.947 回答