public void Start_Should_LoopBySpan() { var mockTask = MockTask.Create(); int loopCount = 3; using (var loopTask = new SimpleLoopTask()) { loopTask.LoopSpan = TimeSpan.FromMilliseconds(50); loopTask.LoopAction = mockTask.MockAction; loopTask.AfterExitLoopAction = mockTask.MockStopAction; loopTask.Start(); Task.Delay(TimeSpan.FromMilliseconds(50 * loopCount + 20)).Wait(); mockTask.StopInvoked.ShouldFalse(); } (mockTask.InvokeCount >= 3).ShouldTrue(); (mockTask.InvokeCount <= 4).ShouldTrue(); mockTask.StopInvoked.ShouldTrue(); }