Вероятно, нет способа смоделировать Thread.Sleep
, потому что это статический метод, и он не может быть смоделирован с помощью основанных на DynamicProxy фреймворков, таких как moq.
Один из вариантов - использовать инструменты на основе Profiler API, например Microsoft Fakes (только в VS Enterprise) или Typemoq professional.
Лучший вариант - не вызывать Thread.Sleep
непосредственно в вашей бизнес-логике. Вместо этого вы можете ввести такой интерфейс
public interface ISleepService
{
void Sleep(int ms);
}
Затем создайте реализацию по умолчанию, которую вы используете в своем коде:
public class SleepService: ISleepService
{
public void Sleep(int ms)
{
Thread.Sleep(ms);
}
}
Добавление зависимости ISleepService в вашу бизнес-логику
public class MyBusinessLogic()
{
private ISleepService _sleepService;
public MyBusinessLogic(ISleepService sleepService)
{
_sleepService = sleepSerivce;
}
public void MyBusinessMethod()
{
// your code
_sleeService.Sleep(20000);
// more code
}
}
Затем вы можете легко смоделировать ISleepService в своих модульных тестах и передать реальную реализацию в свой производственный код