2011-11-08 9 views
2

は、私が持っているとしましょう:RX + MOQ + TestScheduler

  • テスト対象のオブジェクト(それは内部RXを利用)。
  • RXも利用するテストオブジェクト依存の数 - MOQを使用して作成されました。

質問: これは、同じTestSchedulerインスタンスを使用してテストオブジェクト内および外部観測対象のタイミングを制御する誤ったアプローチですか?任意の特定のテストのために、事前

答えて

6

おかげで、あなたがすべき(とする必要があります!)/はISchedulerを取ることができ、または他のそれが動作しない必要とするすべてのオブジェクト/メソッドの同じ TestSchedulerを使用しています。 ™ReactiveUIは、テスト時にオーバーライドすることができますグローバル「MainThreadScheduler」オブジェクトを持つ経由でこれを行うので、あなたのようなことを行うことができます。

var oldSched = RxApp.MainThreadScheduler; 
RxApp.MainThreadScheduler = new TestScheduler(); 

// Do a Test, and make sure all your test and runtime code use RxApp schedulers 

RxApp.MainThreadScheduler = oldSched; 

あるいは、よりエレガントなRxUIの方法は.With()経由で

(new TestScheduler()).With(sched => { 
    // Do a test here. 
});