Sample code (using .NET 10.0 and Testably.Abstractions.Testing 6.1.0):
using Testably.Abstractions.Testing;
var time = new MockTimeSystem(o => o.DisableAutoAdvance());
Console.WriteLine($"original: {time.DateTime.UtcNow}");
using var timer = [time.Timer.New](http://time.timer.new/)(
_ => Console.WriteLine($"from callback: {time.DateTime.UtcNow}"),
null,
TimeSpan.FromSeconds(5),
Timeout.InfiniteTimeSpan);
await Task.Yield();
Console.WriteLine($"before advance: {time.DateTime.UtcNow}");
time.TimeProvider.AdvanceBy(TimeSpan.FromSeconds(6));
Console.WriteLine($"after advance: {time.DateTime.UtcNow}");
Console.WriteLine("*********************************");
Console.WriteLine($"original: {DateTime.UtcNow}");
using var timer2 = new Timer(
_ => Console.WriteLine($"from callback: {DateTime.UtcNow}"),
null,
TimeSpan.FromSeconds(5),
Timeout.InfiniteTimeSpan);
await Task.Yield();
Console.WriteLine($"before advance: {DateTime.UtcNow}");
await Task.Delay(TimeSpan.FromSeconds(6));
Console.WriteLine($"after advance: {DateTime.UtcNow}");
Console.ReadKey();
Output:
original: 6/2/2012 7:45:20 AM
from callback: 6/2/2012 7:45:20 AM
before advance: 6/2/2012 7:45:20 AM
after advance: 6/2/2012 7:45:26 AM
*********************************
original: 4/9/2026 5:07:24 PM
before advance: 4/9/2026 5:07:24 PM
from callback: 4/9/2026 5:07:29 PM
after advance: 4/9/2026 5:07:30 PM
If new TimerStrategy(TimerMode.StartOnMockWait) is used, then the callback is never invoked at all.
Sample code (using .NET 10.0 and Testably.Abstractions.Testing 6.1.0):
Output:
If
new TimerStrategy(TimerMode.StartOnMockWait)is used, then the callback is never invoked at all.