![](/img/trans.png)
[英]How to make Mockito call different method but return same object instance
[英]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.