在 Mockito 中链接不同的 return 以进行重试调用
Chain different return in Mockito for retryWhen call
我正在 Android.
中为我的 RxJava 可观察对象创建单元测试
我想链接模拟中的 return 个值并在可观察对象中模拟 error/resume 个值。
我正在这样做:
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()
。相反,它会获取第一次 returned 的 Observable.error()
并重新订阅它。
为了以这种方式使用 retryWhen()
,您必须 return 一个 Observable
第一次订阅时 return 是一个错误并且在后续订阅中不会这样做。例如,您可以这样做:
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... */)
我正在 Android.
中为我的 RxJava 可观察对象创建单元测试我想链接模拟中的 return 个值并在可观察对象中模拟 error/resume 个值。
我正在这样做:
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()
。相反,它会获取第一次 returned 的 Observable.error()
并重新订阅它。
为了以这种方式使用 retryWhen()
,您必须 return 一个 Observable
第一次订阅时 return 是一个错误并且在后续订阅中不会这样做。例如,您可以这样做:
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... */)