使用RxLoader进行Espresso测试

7
我有一个活动,使用 RxLoader 在活动创建时从服务器获取数据,并填充列表视图。我还编写了测试代码,尝试在填充后单击列表视图的第一行。
由于我使用了 RxLoader,因此必须为 Espresso 编写自定义的 IdlingResource。然而,问题在于测试在我的列表视图填充之前就完成了(失败了)。
以下是我的 Activity 代码:
        RxLoaderManager.get(this).create(
            "my_loader",
            mRestService.loadData(),
            new RxLoaderObserver<MyData>() {
                @Override
                public void onNext(MyData data) {
                    // populate listview with data here
                    ...
                }
  });

这是我的IdlingResource实现代码:

public class IdlingApiServiceWrapper implements IdlingResource {

public Observable<MyData> loadData(){
    counter.incrementAndGet();
    Observable<MyData> observable = api.loadData().finallyDo(new Action0() {
        @Override
        public void call() {
            counter.decrementAndGet();
            notifyIdle();
        }
    });
    return observable;

问题在于:当我运行测试代码时,在我的活动中“onNext()”方法之前总是调用“counter.decrementAndGet()”方法。我的测试失败,因为它期望listview被填充。

显然我做错了什么。但是我做错了什么?

更新:

这里有一个更清晰的代码片段来说明问题:

        RxLoaderManager.get(this).create(
            "my_loader",
            myObservable.finallyDo(new Action0() {
                @Override
                public void call() {
                    //log
                }
            }),
            new RxLoaderObserver<MyData>() {
                @Override
                public void onNext(MyData data) {
                // do something here
            }
        }).start();         

在上述代码中,finallyDo()中的代码片段在观察者的“onNext()”调用之前被调用。finallyDo()应该在“onNext()”之后被调用吗?
1个回答

1
我被 Evan Tatarka 指向了正确的方向: https://github.com/evant/rxloader/issues/14 这是我的最终解决方案:
public class IdlingApiServiceWrapper implements IdlingResource {

public Observable<MyData> loadData() {
    counter.incrementAndGet();
    Observable<MyData> observable = api.loadData().finallyDo(new Action0() {
        @Override
        public void call() {
             new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    counter.decrementAndGet();
                    notifyIdle();
                }
            });
        }
    });
    return observable;
}

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接