2016-11-29 53 views
0

我正在測試一個調用幫助器庫方法的方法,該方法返回一個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) 

回答

0

你至少需要訂閱TestSubscriber

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

如果你的代碼是異步的(因爲你有一個調度交換機),轉換成阻塞可觀察第一。

+0

呃,我覺得自己很愚蠢。謝謝 –

相關問題