С faketime можно использовать тесты
Я для себя нашел два варинта, вероятно есть еще, но я остановился на этих: 1. Создать тип который будет отдавать то время которое ты ему, к примеру, передашь при инициализации или будет возвращать значение из библиотечной time.Now(), но в этом случае придется заменить вызов time.Now() в уже написанном коде на получение времени с помощью нового типа. 2. Если написанный код менять нет возможности а time.Now() нужно замокать, то можно использовать monkey patching подход, но только для тестов.
https://github.com/LopatkinEvgeniy/clock
Тут не просто time.Now, тут всё время мокается (удобно для теста таймеров-тикеров, ttl-cache и подобного)
Прикольно, я до этого просто делал getTime func() time.Time
monkey patch
а дайте рецепт как патчите?
Да в тот момент было не удобно ссылку найти Вот https://github.com/bouk/monkey Архив правда сделали, ноо софт дописан
это я видел и не стал использовать) стремно
Таа не сы все нормально будет)
В данный момент у меня для моего типа данных matcher для gomega кастомный, которые сравнивает время с определенной точностью Мб такой вариант ещё подойдёт
для gomock, да?
https://onsi.github.io/gomega/
а не, я реализовал матчер для gomock, который сравнивает поля кроме генерируемых и такой вариант мне совсем не понравился так как он игнорирует идентификатор. в итоге я создал интерфейс Clock с методом Now и создал интерфейс IDGenerator с методом NewString для генерации uuid
https://github.com/bouk/monkey/blob/master/LICENSE.md
А насколько потом поддерживаемый этот код, который по сути, написан ради тестов
А как параметр передавать не годится? Ну или просто игнорировать его в тестах
а что его поддерживать? он делает вызов тайм нау
так как параметр и передаю в конструктор
Тогда чего мокать, уже задана инъекция
Обсуждают сегодня