Если количество сна, которое вы спите, не имеет никакого значения в тесте, и вы можете установить i равным 1 миллисекунде, тогда может быть достаточно просто спать в течение 1 миллисекунды в вашем тесте.
Однако, если вы хотите протестировать сложные временные характеристики с таймаутами и конкретными действиями, предпринимаемыми в определенные моменты времени, быстро становится проще абстрагировать понятие времени и внедрить его как зависимость. Тогда ваши тесты могут работать в виртуальном времени и выполняться без задержки, даже если код работает так, как если бы проходило реальное время.
Простой способ виртуализации времени - использовать что-то вроде этого:
interface ITimeService {
DateTime Now { get; }
void Sleep(TimeSpan delay);
}
class TimeService : ITimeService {
public DateTime Now { get { return DateTime.UtcNow; } }
public void Sleep(TimeSpan delay) { Thread.Sleep(delay); }
}
class TimeServiceStub : ITimeService {
DateTime now;
public TimeServiceStub() {
this.now = DateTime.UtcNow;
}
public DateTime Now { get { return this.now; } }
public void Sleep(TimeSpan delay) {
this.now += delay;
}
}
Вам придется расширить эту идею, если вам требуется более реактивное поведение, такое как срабатывание таймеров и т. Д.