Есть ли способ установить DateTime для потока / приложения с произвольным значением - PullRequest
3 голосов
/ 08 сентября 2011

Мне это нужно в нескольких моих тестах по автоматизации. Основная функциональность зависит от времени, и это приводит к сбою тестовых случаев, если я запускаю их в дневное время, для которого нет записи.

Я знаю, что у меня есть еще одна, но довольно утомительная опция для проверки хранилища и генерирования зависящих от времени данных во время выполнения, но - я просто хочу знать, могу ли я сделать это другим способом - управляя DateTime для приложения и / или поток такой, что DateTime.Now возвращает значение на основе того, что я установил где-то в начале?

Это действительно возможно?

1 Ответ

2 голосов
/ 08 сентября 2011

TypeMock изолятор утверждает, что может сделать это . Лично я предпочел бы изменить свой код, чтобы внедрить IClock и использовать его. Производственные часы могут использовать DateTime.Now (или UtcNow), но я могу просто и чисто представить макет.

Если это затрагивает слишком много вещей, например, статическую реализацию, так что вы можете использовать Current.Time или что-то еще (где Current - ваш класс), но это позволяет использовать косвенные ссылки / подделку для тестов. В самом деле, это можно сделать, используя приведенное выше, просто с помощью:

private static IClock clock = new DateTimeClock();
public static void SetClock(IClock clock) { Current.clock = clock; }
public static DateTime Time { get { return clock.Now; } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...