我在组合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
?