Работа с датами в любом языке программирования представляет некоторые сложности. В этом посте я покажу, как работать с датами при написании модульных тестов для приложения на Go.
Давайте рассмотрим пример:
Один из способов написать модульный тест для этого кода может быть:
Еще один способ решения этой проблемы - создание абстракции для пакета времени. Для этого мы создадим новый пакет под названием clock, внутри которого добавим файл clock.go:
Следующим шагом будет рефакторинг функции, которая будет использовать новый пакет.
Так как функция canIEat получает интерфейс clock.Clock, мы можем в нашем тесте использовать новую реализацию этого интерфейса:
Таким образом, мы лучше контролируем то, что мы используем в тесте, и повышаем производительность, потому что больше не нужно выполнять вычисления даты, такие как time.Now().AddDate(0, 0, 1) в первом примере. То, что я здесь делаю, это простой совет, но он показывает, насколько мощным и легким в использовании является концепт интерфейсов в Go.