3
Return
とDelay
の組み合わせを含む観測値の単体テストを書くのに問題があります。問題は、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);
奇妙なことは、私はStart
方法にcreated
、subscribed
とdisposed
タイミングを追加するとき、それは仕事をしていることです。それはすべて罰金とダンディーですが、私は本当に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リポジトリに 'Start'オーバーロードに関するチケットがあります。 https://github.com/Reactive-Extensions/Rx.NET/issues/81 – Wouter