Я начинаю строить часть системы, которая проведет много валидаций DateTime, и много «если бы это было сделано раньше» или «если она начнется через час и т. Д.».Как мне создать свою собственную 'now'/DateTime.Now?
Обычный путь состоит в использовании DateTime.Now, чтобы получить фактическое время.
Я предсказываю, однако, что во время модульного теста, который даст мне настоящую головную боль, потому что мне нужно будет настроить мои тестовые данные за время, когда тест будет работать вместо использования набора данных теста по умолчанию. Итак, я подумал: почему бы не использовать мое собственное «сейчас», поэтому я могу установить текущее время и время в любой момент времени. Поскольку я не хочу устанавливать внутренние часы testervers, я думал об этом решении, и мне было интересно, что вы думаете об этом. Основой является то, что я использую свой собственный класс DateTime. Этот класс дает вам текущее время и время, но вы также можете настроить свое собственное время снаружи.
public static class MyDateTime
{
private static TimeSpan _TimeDifference = TimeSpan.Zero;
public static DateTime Now
{
get
{
return DateTime.Now + _TimeDifference;
}
}
public static void SetNewNow(DateTime newNow)
{
_TimeDifference = newNow - DateTime.Now;
}
public static void AddToRealTime(TimeSpan timeSpan)
{
_TimeDifference = timeSpan;
}
public static void SubtractFromRealTime(TimeSpan timeSpan)
{
_TimeDifference = - timeSpan;
}
}
что случилось с встроенными методами Framework DateTime? –
Возможный дубликат: http://stackoverflow.com/questions/2425721/unit-testing-datetime-now –
Я бы не назвал его 'MyDateTime', слишком легко ошибочным для' DateTime', лучше назвать его чем-то более простым выделить. –