3
我無法爲包含Return
和Delay
的組合的observable編寫單元測試。問題是TestScheduler
不會發出任何通知,無論提前多長時間。Rx 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);
謝謝,這也很好地工作。看來我並不是唯一的一個,在Rx.NET存儲庫中有一個關於「開始」重載的票。 https://github.com/Reactive-Extensions/Rx.NET/issues/81 – Wouter