2014-09-30 13 views
1

我想在REST服務器和我的Android應用程序之間執行集成測試。 總之,我的應用程序執行get查詢來獲取json元素數組('場景')。 我的測試通過了,但幾乎沒有優雅和高效,因爲我引入了10秒的延遲。 在我最後的斷言之前,我更喜歡像'observationThread.join()'這樣的東西,但是到目前爲止我還沒有找到方法。 有什麼想法?rxjava android測試一個典型的REST查詢

這裏是我的代碼:

public void test_should_return_2_scenarios() throws InterruptedException { 
    ScenarioBoundary scenarioBoundary = new ScenarioBoundary(); 
    final List<Scenario> scenarios = new LinkedList<Scenario>(); 
    ImmediateScheduler immediateScheduler = (ImmediateScheduler) Schedulers.immediate(); 
    scenarioBoundary.getObservableScenarios().subscribeOn(immediateScheduler).observeOn(immediateScheduler).subscribe(new Observer<Scenario>() { 
     @Override 
     public synchronized void onCompleted() { 
      Log.d(TAG, "Completed"); 
     } 

     @Override 
     public synchronized void onError(Throwable e) { 
      Log.d(TAG, e.getMessage()); 
      assertFalse("Error when testing scenario retrieval!", true); 
     } 

     @Override 
     public void onNext(Scenario scenario) { 
      Log.d(TAG, scenario.toString()); 
      scenarios.add(scenario); 
     } 
    }); 
    immediateScheduler.createWorker().schedule(new Action0() { 
     @Override 
     public void call() { 
      assertEquals(2, scenarios.size()); 
     } 
    }, 10, TimeUnit.SECONDS); 
} 

回答

1

您可以使用toBlocking()方法來阻止觀察到的,得到最終結果。例如,

public void test_should_return_2_scenarios() throws InterruptedException { 
    ScenarioBoundary scenarioBoundary = new ScenarioBoundary(); 
    List<Scenario> scenarios = scenarioBoundary.getObservableScenarios().toList().toBlocking().single(); 
    List<Scenario> expectedScenarios = ...; 
    assertEquals(expectedScenarios, scenarios); 
} 

更多信息:https://github.com/ReactiveX/RxJava/wiki/Blocking-Observable-Operators