如何将Espresso与IdlingResource与RxJava的主题相结合

时间:2017-01-27 12:59:37

标签: android rx-java android-espresso rx-android

我在组合Google的Espresso测试自动化库时遇到了问题。

在生产代码中,使用以下转换器将Scheduler应用于Observable

public SCProductionUiSchedulersTransformer() {
    schedulersTransformer = new Observable.Transformer() {
        @Override
        public Object call(Object observable) {
            return ((Observable) observable)
                    .subscribeOn(rxFactory.getIoScheduler())
                    .observeOn(rxFactory.getMainThreadScheduler());
        }
    };
}

在Espresso自动化测试中,使用以下内容:

public <T> SCIdlingUiSchedulersTransformer(Context context, final CountingIdlingResource countingIdlingResource) {
    schedulersTransformer = new Observable.Transformer<T, T>() {
        @Override
        public Observable<T> call(Observable<T> observable) {
            return observable
                    .subscribeOn(rxFactory.getIoScheduler())
                    .observeOn(rxFactory.getMainThreadScheduler())
                    .doOnSubscribe(new Action0() {
                        @Override
                        public void call() {
                            countingIdlingResource.increment();
                        }
                    })
                    .doOnTerminate(new Action0() {
                        @Override
                        public void call() {
                            countingIdlingResource.decrement();
                        }
                    });
        }
    };
}

CountingIdlingResource是用于通知自动化Espresso的常规Thread应用程序不处于空闲状态,并且必须等待操作完成。

对于常规Observable,以下代码可以正常运行。

问题出在Observable Subject类型。当然它不起作用,因为在Activity启动时订阅主题并导致自动Thread挂起。

有没有办法调整代码以使其适用于Subject?也许检测到observable的类型为Subject

0 个答案:

没有答案