在 Mockito 中链接不同的返回以重试调用时



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

相关内容

  • 没有找到相关文章