RX + MOQ + TestScheduler

时间:2011-11-08 07:55:57

标签: moq system.reactive

让我说我有:

  • 要测试的对象(它内部使用RX);
  • 使用RX的测试对象依赖项的数量 - 使用MOQ创建。

问题是: 这是一种错误的方法,使用相同的TestScheduler实例来控制测试对象和外部可观察对象的时间吗?

提前致谢

1 个答案:

答案 0 :(得分: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.
});