2014-09-30 16 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