Как проверить функцию, которая зависит от даты события? - PullRequest
1 голос
/ 16 марта 2012

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

Для простоты, давайте предположим эту функцию: мы отслеживаем папку и добавляем элементы в ListView, соответствующие полученному файлу. Цвет элемента списка будет зависеть от даты его получения. Скажем, если оно получено в воскресенье, цвет красный, понедельник, синий и т. Д.

Как мы можем создать тестовый код для этой функции, не затрачивая на это неделю? Должен ли тестовый код изменить системную дату (но я боюсь, что это приведет к странностям в структуре тестирования и отчете)? Для информации, приложение является .net, и разработчик использует DateTime.Now, чтобы получить время получения.

Обратите внимание , что это не модульный тест, это приемочный тест, имитирующий взаимодействие с пользователем.

Ответы [ 4 ]

2 голосов
/ 16 марта 2012
  • Вам придется использовать Fake Framework, который может заглушить то, что возвращает DateTime.Now, без необходимости в интерфейсе. Нравится TypeMock
  • В противном случае вы могли бы создать свой собственный объект Date, который бы вы могли лучше контролировать подделкой (в этом случае это менее желательно, поскольку это делается только для проверки вашего кода)
  • В противном случае вы можете создать класс с методом GetCurrentDate, который вы можете заглушки. В своей реализации prod вы можете использовать DateTime.Now, но в своем тесте вы можете заглушить его, чтобы он возвращал любую дату, которую вы хотите. Это, наверное, лучшее решение ИМО

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

0 голосов
/ 16 марта 2012

Вам нужен какой-то способ «насмешки» интерфейса DateTime, то есть заставить DateTime возвращать заранее определенные значения, а не текущее время.Процесс «внедрения» ложного класса для замены существующего известен как «внедрение зависимостей» (DI), и ряд структур для выполнения DI обсуждается по адресу:

Какая зависимость .NETИнъекционные рамки стоит изучить?

0 голосов
/ 16 марта 2012

Если это приемочное тестирование, требующее взаимодействия с пользователем, лучше всего изменить системное время.

Если это модульное тестирование, вам нужно передать зависимость (DateTime) в метод, который нужно протестировать.

0 голосов
/ 16 марта 2012

Измените свое время непосредственно перед событием.

...