在Mockito链接不同的回报以便重试

Dei*_*zan 5 mockito rx-java rx-android

我正在为Android中的RxJava observable创建单元测试.

我想从模拟中链接返回值并在observable中模拟错误/恢复值.

我这样做:

when(repository.getObservable())
            .thenReturn(Observable.error(new Exception()))
            .thenReturn(Observable.just(driver));
Run Code Online (Sandbox Code Playgroud)

我的观察:

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);
            })))
Run Code Online (Sandbox Code Playgroud)

但我只接受了Observable.error(new Exception()),甚至称该retryWhen方法3次以上.

有人知道我怎样才能测试重新发射不同的观测值以测试retryWhen操作员?

谢谢!

Dan*_*Lew 9

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... */)
Run Code Online (Sandbox Code Playgroud)