Retrofit 2、Mockito 1.10、RXJava 1.0を使用しているAndroidアプリケーション用の単体テストを作成しようとしています。私はラムダをサポートするJavaバージョンを使用していません!ユニットテスト:AndroidでRxJavaでObservableを確認する方法
私のコードでは、観測を使用して、私は次の操作を行うことができます
when(myAPI.Complete(anyString(), any(MyContainer.class)))
.thenReturn(Observable.<GenericResponse>error(new Throwable("An error has occurred!")));
Subscriber genericResponseSubscriber = mock(Subscriber.class);
myPresenter.myUseCase(id, container, genericResponseSubscriber);
verify(genericResponseSubscriber, times(1)).onError(any(Throwable.class));
上記のコードは正常に動作し、エラーをスローし、テストの中でそれをキャプチャするために私をことができます。
私が(もちろん)できることが必要なのは、肯定的な条件を捉えることです。私はそれが明らかだと思うが、私が必要とする答えを見つけることができない。
どのようにonCompleteとonNextのケースをキャプチャできますか?
私はonCompleteのための検証が可能となることを知っている...
検証(genericResponseSubscriber、時間(1))onCompleted();
しかし、私はいつ私の 'when'節があるべきか分かりません。私は以下を試しましたが、失敗しました:
GenericResponse response = new GenericResponse();
response.setSuccess(true);
when(myAPI.orderComplete(anyString(), any(MyContainer.class)))
.thenReturn(Observable.just(response));
Subscriber genericResponseSubscriber = mock(Subscriber.class);
myPresenter.myUseCase(id, container, genericResponseSubscriber);
verify(genericResponseSubscriber, times(1)).onCompleted();
ここでの失敗は、subscriber.onStart()が代わりに呼び出されたことです。
私が知りたいのは、「onComplete」と「onNext」の呼び出しを模擬して検証する方法です。もっと重要なのは、これを解決するためにはどうしたらいいのでしょうか。聞く、質問する! :)
いつもどんな助けもありがとうございます。
編集..
私のonError作業テストケース..
public void UseCaseOnError() throws Exception {
String id = "5";
order Order = new Order();
SomeContainer myContainer = new SomeContainer(order);
when(myRetroFitAPI.complete(anyString(), any(SomeContainer.class)))
.thenReturn(Observable.error(新しいThrowableを(「私のエラー! ")));
Subscriber genericResponseSubscriber = mock(Subscriber.class);
orderPresenter.doUseCase(id, myContainer, genericResponseSubscriber);
verify(genericResponseSubscriber,times(1)).onError(any(Throwable.class));
}
私が本当に追加しなければならないのは、正の状態、つまりonCompletedの点でonErrorと同等のものがあるはずだと思います。同じことをoncompletedで実行した場合、代わりにonCompletedを使用すると、代わりに、私はむしろ混乱していると分かっています。
私は、次のようなReplaySubjectを使用して試してみました:
public void createOrderOnCompleteError() {
orderOnCompleteSubject.onError(new Throwable("I am an error"));
}
public void createOrderOnCompleteSuccess() {
orderOnCompleteSubject.onNext(new GenericResponse().setSuccess(true));
orderOnCompleteSubject.onCompleted();
}
エラーメカニズムが正常に動作します。..完成メカニズムが...
1時間で2つの回答:D ありがとうございました:) – greysqrl