RxJava Mockito何时 - 返回已解析的可观察对象
问题描述:
我正在测试一个调用帮助器库方法的方法,该方法返回一个Observable<Void>
,并在完成后运行它的逻辑flatMap
并调用一个API终点,该终点返回Observable<SomeObject>
。RxJava Mockito何时 - 返回已解析的可观察对象
我遇到的问题是,在我的测试中从来没有去过flatMap。
@Mock private RequestHelperSourceImpl requestHelper;
@Mock private OrdersRepositoryImpl repository;
// setup & teardown code…
@Test
public void shouldSingleOrder() {
SingleOrder singleOrder = mock(SingleOrder.class);
TestSubscriber<SingleOrder> testSubscriber = new TestSubscriber<>();
when(requestHelper.doJwtRequest(anyString())).thenReturn(Observable.just(null));
when(repository.getOrder(anyLong(), anyString(), anyString(), anyInt())).thenReturn(Observable.just(singleOrder));
// The method I'm testing
spySubject.getOrder(anyInt(), anyString());
testSubscriber.assertValue(singleOrder);
}
下面是我测试
@Override
public Observable<SingleOrder> getOrder(long orderId, String jwtToken) {
return requestHelper.doJwtRequest(jwtToken)
.flatMap(Void -> {
////////<------ It never gets here
return repository.getOrder(
orderId,
requestHelper.getAccessToken(),
jwtToken,
jtApp.isTryoutInt()
).compose(JTRxUtils.applySchedulers());
});
}
而且这里的方法的代码对doJwtRequest
Observable<Void> doJwtRequest(String jwt);
签名下面是运行测试时,我得到的错误:
java.lang.AssertionError: Number of items does not match. Provided: 1 Actual: 0.
Provided values: [singleOrder]
Actual values: []
(0 completions)
答
你至少需要订阅TestSubscriber
:
spySubject
.getOrder(anyInt(), anyString())
.subscribe(testSubscriber);
如果你的代码是异步的(因为你有一个调度交换机),转换成阻塞可观察第一。
呃,我觉得自己很愚蠢。谢谢 –