Какой хороший способ перезаписать DateTime.Now во время тестирования? - PullRequest
107 голосов
/ 04 сентября 2008

У меня есть некоторый (C #) код, который опирается на сегодняшнюю дату, чтобы правильно вычислять вещи в будущем. Если я использую сегодняшнюю дату в тестировании, я должен повторить расчет в тесте, который не кажется правильным. Каков наилучший способ установить дату на известное значение в тесте, чтобы я мог проверить, что результат является известным значением?

Ответы [ 11 ]

0 голосов
/ 04 сентября 2008

Рассматривали ли вы использование условной компиляции для управления тем, что происходит во время отладки / развертывания?

, например

DateTime date;
#if DEBUG
  date = new DateTime(2008, 09, 04);
#else
  date = DateTime.Now;
#endif

Если это не так, вы хотите раскрыть свойство, чтобы вы могли им манипулировать, это все часть задачи написания тестируемого кода, который я сейчас пытаюсь решить сам: D

Редактировать

Большая часть меня предпочла бы подход Блэр . Это позволяет вам «горячо подключать» части кода для помощи в тестировании. Все это соответствует принципу разработки инкапсулирует то, что меняется тестовый код ничем не отличается от производственного кода, его просто никто не видит снаружи.

Создание и интерфейс могут показаться довольно трудоемкими для этого примера (вот почему я выбрал условную компиляцию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...