RxJava Mockito何时 - 返回已解析的Observable

时间:2016-11-29 16:28:13

标签: unit-testing junit mockito rx-java powermockito

我正在测试一个方法,该方法调用一个返回Observable<Void>的辅助库方法,并在完成后在flatMap中运行它的逻辑并调用返回{的API端点{1}}。

我遇到的问题是在我的测试中永远不会进入flatMap。

Observable<SomeObject>

以下是我测试方法的代码

@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);

1 个答案:

答案 0 :(得分:0)

您至少需要订阅TestSubscriber

spySubject
.getOrder(anyInt(), anyString())
.subscribe(testSubscriber);

如果您的代码是异步的(因为您有调度程序切换),请先转换为阻塞Observable。