在 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... */)