我在编写包含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功能。我的实际测试用例更复杂,需要手动计时可观察的输入。
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);
答案 0 :(得分:4)
我从未使用过您正在使用的Start
方法。永远不知道它应该如何或为什么起作用。
这应该有效:
var scheduler = new TestScheduler();
var input = new Subject<bool>();
var observable = Observable.Return("feed me")
.Delay(TimeSpan.FromSeconds(1), scheduler);
var observer = scheduler.CreateObserver<string>();
observable.Subscribe(observer);
scheduler.AdvanceBy(1);
Assert.Equal(0, observer.Messages.Count);
// Expecting an OnNext and an OnCompleted notification
scheduler.AdvanceBy(TimeSpan.FromSeconds(2).Ticks);
Assert.Equal(2, observer.Messages.Count);