我试图写一个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