В настоящее время я пишу модульный тест на компонент, который делает дату и время определенная проверка. Я создал IDateTimeProvider
интерфейс, который служит a DateTime.UtcNow
сновальная машина и бизнес-объекты используют интерфейс, а не DateTime
непосредственно. Кажется, что DateTime немного перегружается и должен быть разделен на значение и вещь, которая получает то значение от ОС. Интересно, существует ли конкретная причина не иметь a IDateTimeProvider
(IClock
) интерфейс в.NET?
Проще говоря: потому что большие части BCL не были предназначены для тестирования.
То же самое верно и для генерации случайных чисел с точки зрения «основной» функциональности - и многие классы, связанные с HTTP, гораздо хуже подделать :( По крайней мере, в этом случае довольно легко ввести свои собственные часы интерфейс.
С другой стороны, когда Noda Time готов к производственному использованию, он не только предоставит лучший API даты и времени, чем BCL, но и более удобный для тестирования :)
Мы последовательно используем класс-обертку DateTimeProvider, который мы можем переопределить в тестовом контексте, если это необходимо...