RxJava Mockito when - 返回已解决的可观察对象
RxJava Mockito when - Returning a Resolved Observable
我正在测试一种方法,该方法调用 returns 一个 Observable<Void>
的辅助库方法,完成后它在 flatMap
中运行它的逻辑并调用 API returns 和 Observable<SomeObject>
.
的终点
我遇到的问题是在我的测试中永远无法访问 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);
如果您的代码是异步的(因为您有一个调度程序开关),请先转换为阻塞 Observable。
我正在测试一种方法,该方法调用 returns 一个 Observable<Void>
的辅助库方法,完成后它在 flatMap
中运行它的逻辑并调用 API returns 和 Observable<SomeObject>
.
我遇到的问题是在我的测试中永远无法访问 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);
如果您的代码是异步的(因为您有一个调度程序开关),请先转换为阻塞 Observable。