rxjava Mockito - 返回可观察到的解决方案



我正在测试一种调用辅助库方法的方法,该方法返回 Observable<Void>并完成后,它运行的是在 flatMap中的逻辑,并调用API端点,该端点返回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);

如果您的代码是异步的(因为您有调度程序开关),请先转换为可观察的封锁。

相关内容

  • 没有找到相关文章

最新更新