我試圖寫一個Android應用程序的一些單元測試是利用改造2,1.10的Mockito和RXJava 1.0驗證和模擬onCompleted可觀察的RxJava。我沒有使用支持lambdas的java版本!單元測試:如何內的Android
我的代碼使用觀測量,我可以做到以下幾點:
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()。
但我不能看到我的「當」條款應該是什麼。我嘗試以下,但失敗:
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));
}
我應該補充的是,我覺得在onError方面應該有一個相當於onComror的狀態,即onCompleted。如果我這樣做,但是用onCompleted代替,我的驗證失敗,因爲它檢測到o nStart已被調用,而我發現相當混亂。
我已經使用ReplaySubject這樣嘗試:
public void createOrderOnCompleteError() {
orderOnCompleteSubject.onError(new Throwable("I am an error"));
}
public void createOrderOnCompleteSuccess() {
orderOnCompleteSubject.onNext(new GenericResponse().setSuccess(true));
orderOnCompleteSubject.onCompleted();
}
錯誤機制的工作很好..完成機制不...
在一個小時內從你的兩個答案:D 非常感謝你:) – greysqrl