2017-07-25 47 views
0

我想測試一下這種方法:如何正確測試,如果用戶在onNext()(RxJava2)調用正確的數據

void updateAvailableScreens() { 
     safieCam.availableCameras() 
       .flatMap(this::getAvailableScreensForCameras) 
       // causing failure .observeOn(schedulers.mainThread()) 
       .subscribe(
         screens -> { 
          view.setAvailablePagesOnViewPager(screens); 
          view.setAvailablePagesOnBottomSheet(screens); 
         }, 
         Timber::e 
       ); 
    } 

與這個測試(所以給已知的數據,我希望調用視圖預計枚舉列表):

@Test 
public void widgetsShouldGetAllScreens() { 
    when(camera.availableCameras()).thenReturn(
      Observable.just(Arrays.asList(
        SafieCam.CameraType.SELFIE, 
        SafieCam.CameraType.REAR))); 
    testedVPPresenter.updateAvailableScreens(); 

    List<ViewPagerView.Pages> pages = Arrays.asList(
      ViewPagerView.Pages.SELFIE, 
      ViewPagerView.Pages.REAR_CAMERA, 
      ViewPagerView.Pages.LOGIN); 
    verify(view).setAvailablePagesOnViewPager(pages); 
    verify(view).setAvailablePagesOnBottomSheet(pages); 
} 

但當observeOn是註釋掉測試將失敗,並view由於零個互動,否則會贏得成功。

需要信息: schedulers是接口包裝器,所有調用的調度器都在TestScheduler的測試上被模擬。

問題:我在這裏做錯了什麼?如果是的話,是什

回答

0

我濫用TestScheduler,因爲我沒有使用測試調度器(在我的情況後testedVPPresenter.updateAvailableScreens()

因此,所有的事件都排隊後打電話

testScheduler.triggerActions()

,但沒有執行。