Как мокировать time.Now?

Middle
490 просмотров
AFK Offer AI

time.Now() — глобальная функция, её нельзя подменить напрямую. Способы: 1) Передавать функцию: type TimeFunc func() time.Time, в проде time.Now, в тестах фиксированное время. 2) Интерфейс Clock: type Clock interface { Now() time.Time }, реальный clock и mock clock. 3) Пакеты вроде github.com/benbjohnson/clock. 4) Передавать time.Time как параметр вместо вызова Now() внутри. Вариант 4 — самый простой и идиоматичный. Если функция зависит от времени — пусть принимает его явно, а не берёт из глобального состояния.

Следующий вопрос

Как работает NAT?