簡體   English   中英

在 Mockito 中鏈接不同的返回值以進行重試時調用

[英]Chain different return in Mockito for retryWhen call

我正在為 Android 中的 RxJava observable 創建單元測試。

我想鏈接來自模擬的返回值並在可觀察對象中模擬錯誤/恢復值。

我這樣做:

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+ 次。

有人知道如何測試不同 observable 的重新發射來測試retryWhen運算符嗎?

retryWhen()不會第二次調用repository.getObservable() 相反,它接受第一次返回的Observable.error()並重新訂閱它。

為了以這種方式使用retryWhen() ,您必須返回一個Observable ,該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... */)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM