.Schedule(DateTimeOffset、Action>)のものを使用してRXスケジューラークラスを操作しています。基本的に、私は自分自身を再びスケジュールできるスケジュールされたアクションを持っています。
コード:
public SomeObject(IScheduler sch, Action variableAmountofTime)
{
this.sch = sch;
sch.Schedule(GetNextTime(), (Action<DateTimeOffset> runAgain =>
{
//Something that takes an unknown variable amount of time.
variableAmountofTime();
runAgain(GetNextTime());
});
}
public DateTimeOffset GetNextTime()
{
//Return some time offset based on scheduler's
//current time which is irregular based on other inputs that i have left out.
return this.sch.now.AddMinutes(1);
}
私の質問は、variableAmountofTimeにかかる時間をシミュレートし、コードが期待どおりに動作し、期待どおりに呼び出しをトリガーするだけであることをテストすることに関するものです。
デリゲート内でテストスケジューラの時間を進めてみましたが、うまくいきません。私が書いたコードの例は機能しません。GetNextTime()がちょうど1分をスケジュールしていると仮定します。
[Test]
public void TestCallsAppropriateNumberOfTimes()
{
var sch = new TestScheduler();
var timesCalled = 0;
var variableAmountOfTime = () =>
{
sch.AdvanceBy(TimeSpan.FromMinutes(3).Ticks);
timescalled++;
};
var someObject = new SomeObject(sch, variableAmountOfTime);
sch.AdvanceTo(TimeSpan.FromMinutes(3).Ticks);
Assert.That(timescalled, Is.EqualTo(1));
}
3分先に行きたいのですが、実行に3分かかるので、これを1回だけトリガーしたいのですが、3回トリガーします。
テストスケジューラを使用して、実行中に時間がかかるものをシミュレートするにはどうすればよいですか。