2016-09-21 9 views
3

私のプロジェクトをRx v1からRx v2に変換しています。現在、v1 Observableの一部をv2 Flowableに変更しています。Rx v2 Flowableの同期ユニットテストの作成

(スポックを使用してGroovyで書かれたユニットテストとAndroidのプロジェクトにおけるITS)

通常、私はちょうどフックを使用してスケジューラをオーバーライドします。私はまだv2でスケジューラーハンドラーを登録することでこれを行うことができます。これにより、Observableは常に(新しい?)Schedulers.single()を使用して同期されます。しかし、Flowableは、背圧機械(?)のために依然として非同期です。

私は、以下のものを使用していることを解決してみました:

Flowable<LogEntry> flowable = Flowable.create(new FlowableOnSubscribe<LogEntry>() { 
    @Override 
    void subscribe(FlowableEmitter<LogEntry> emitter) throws Exception { 
     for (def log : logs) { 
      emitter.onNext(log) 
     } 

     emitter.onComplete() 
    } 
}, FlowableEmitter.BackpressureMode.NONE); 

しかし、まだ彼らは非同期になりこと。

私はこのようなスケジューラオーバーライドしました:私はObservable sがこのように同期して動作しますが、Flowable S(背圧メカニックの脇)しない理由を把握することができないよう

RxJavaPlugins.reset() 
RxJavaPlugins.setIoSchedulerHandler(new Function<Scheduler, Scheduler>() { 
    @Override 
    Scheduler apply(Scheduler scheduler) throws Exception { 
     return Schedulers.single() 
    } 
}) 

RxAndroidPlugins.reset() 
RxAndroidPlugins.setMainThreadSchedulerHandler(new Function<Scheduler, Scheduler>() { 
    @Override 
    Scheduler apply(Scheduler scheduler) throws Exception { 
     return Schedulers.from(new Executor() { 
      @Override 
      void execute(Runnable command) { 
       command.run() 
      } 
     }) 
    } 
}) 

答えて

5

Schedulers.single()は、シングルスレッド非同期スケジューラです。同じスレッドに残るにはSchedulers.trampoline()が必要です。

+0

ありがとうございます! v1の「即時」スケジューラの置き換えを探していました。 –

+0

私たちはその話題に取り組んでいますが、その事実を文書に加えることは意味がありますか? –

+0

どのドキュメントですか? – akarnokd

関連する問題