【发布时间】:2017-10-16 15:58:30
【问题描述】:
我在为包含Return 和Delay 组合的可观察对象编写单元测试时遇到问题。问题是TestScheduler 无论提前多少时间都不会发出任何通知。
var scheduler = new TestScheduler();
var input = new Subject<bool>();
var output = scheduler.Start(() =>
Observable.Return("feed me", scheduler)
.Delay(TimeSpan.FromSeconds(1), scheduler));
scheduler.AdvanceBy(1);
Assert.Equal(0, output.Messages.Count);
// Expecting an OnNext and an OnCompleted notification
scheduler.AdvanceBy(TimeSpan.FromSeconds(2).Ticks);
Assert.Equal(2, output.Messages.Count);
奇怪的是,当我将 created、subscribed 和 disposed 计时添加到 Start 方法时,它确实有效。这一切都很好,但我真的需要 AdvanceBy 功能。我的实际测试用例更复杂,需要对 observable 的输入进行手动计时。
var scheduler = new TestScheduler();
var source = Observable
.Return("Winner!", scheduler)
.Delay(TimeSpan.FromSeconds(1), scheduler);
var output = scheduler.Start(() => source,
0,
0,
TimeSpan.FromSeconds(5).Ticks);
Assert.Equal(2, output.Messages.Count);
【问题讨论】:
标签: unit-testing system.reactive