我正在使用 .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() 只是安排一分钟。
[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 次。
如何使用测试调度程序模拟执行过程中需要时间的东西。