2016-11-29 7 views
0

Observable<Void>を返すヘルパーライブラリメソッドを呼び出すメソッドをテストしており、完了するとロジックがflatMapで実行され、Observable<SomeObject>を返すAPIエンドポイントが呼び出されます。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
spySubject 
.getOrder(anyInt(), anyString()) 
.subscribe(testSubscriber); 

あなたのコードが非同期である場合には(あなたは、スケジューラのスイッチを持っているので)、閉塞観察可能最初に変換:210あなたは、少なくともTestSubscriberに加入する必要があります。

+0

私は忘れて馬鹿だと思う。ありがとう –

関連する問題