我正在为Android中的RxJava可观察量创建单元测试。
我想从模拟中链接返回值,并在可观察量中模拟错误/恢复值。
我正在这样做:
when(repository.getObservable())
.thenReturn(Observable.error(new Exception()))
.thenReturn(Observable.just(driver));
我的可观察:
return repository.getObservable()
.retryWhen(observale -> {
return observable
.zipWith(Observable.range(1, 3), Pair::create)
.flatMap(o -> {
if (o.second < count) {
return Observable.timer(1000, TimeUnit.MILLISECONDS);
}
return Observable.error(o.first);
})))
但我只收到Observable.error(new Exception())
,甚至调用retryWhen
方法3+次。
有人知道如何测试不同可观测值的再发射来测试retryWhen
运算符吗?
retryWhen()
不会第二次调用repository.getObservable()
。相反,它会获取第一次返回的Observable.error()
并重新订阅它。
为了以这种方式使用 retryWhen()
,您必须返回一个Observable
,该在第一次订阅时返回错误,并且在后续订阅中不会这样做。例如,您可以执行以下操作:
Observable.defer(new Func0<Observable<String>>() {
boolean hasBeenSubscribedTo = false;
@Override public Observable<String> call() {
if (!hasBeenSubscribedTo) {
hasBeenSubscribedTo = true;
return Observable.error(new Exception());
}
return Observable.just("Hello, world!");
}
})
.retryWhen(/* ...etc... */)