170 похожих чатов

Я все-таки хочу знать, как вы мокаете time.Now?

20 ответов

11 просмотров

С faketime можно использовать тесты

Я для себя нашел два варинта, вероятно есть еще, но я остановился на этих: 1. Создать тип который будет отдавать то время которое ты ему, к примеру, передашь при инициализации или будет возвращать значение из библиотечной time.Now(), но в этом случае придется заменить вызов time.Now() в уже написанном коде на получение времени с помощью нового типа. 2. Если написанный код менять нет возможности а time.Now() нужно замокать, то можно использовать monkey patching подход, но только для тестов.

https://github.com/LopatkinEvgeniy/clock

Sakorni
https://github.com/LopatkinEvgeniy/clock

Тут не просто time.Now, тут всё время мокается (удобно для теста таймеров-тикеров, ttl-cache и подобного)

Sakorni
https://github.com/LopatkinEvgeniy/clock

Прикольно, я до этого просто делал getTime func() time.Time

monkey patch

Artur-Karapetov Автор вопроса
kostyaBro
monkey patch

а дайте рецепт как патчите?

Artur Karapetov
а дайте рецепт как патчите?

Да в тот момент было не удобно ссылку найти Вот https://github.com/bouk/monkey Архив правда сделали, ноо софт дописан

Artur-Karapetov Автор вопроса
kostyaBro
Да в тот момент было не удобно ссылку найти Вот ht...

это я видел и не стал использовать) стремно

Artur Karapetov
это я видел и не стал использовать) стремно

В данный момент у меня для моего типа данных matcher для gomega кастомный, которые сравнивает время с определенной точностью Мб такой вариант ещё подойдёт

Artur Karapetov
для gomock, да?

https://onsi.github.io/gomega/

Artur-Karapetov Автор вопроса
kostyaBro
https://onsi.github.io/gomega/

а не, я реализовал матчер для gomock, который сравнивает поля кроме генерируемых и такой вариант мне совсем не понравился так как он игнорирует идентификатор. в итоге я создал интерфейс Clock с методом Now и создал интерфейс IDGenerator с методом NewString для генерации uuid

Artur Karapetov
а не, я реализовал матчер для gomock, который срав...

А насколько потом поддерживаемый этот код, который по сути, написан ради тестов

Artur Karapetov
а не, я реализовал матчер для gomock, который срав...

А как параметр передавать не годится? Ну или просто игнорировать его в тестах

Artur-Karapetov Автор вопроса
Alex
А насколько потом поддерживаемый этот код, который...

а что его поддерживать? он делает вызов тайм нау

Artur-Karapetov Автор вопроса
Denis D
А как параметр передавать не годится? Ну или прост...

так как параметр и передаю в конструктор

Artur Karapetov
так как параметр и передаю в конструктор

Тогда чего мокать, уже задана инъекция

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Any electron dev here?
Sayanth Tezro
12
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
так это может кто что знает или использует что-то как макбук только не макбук? на 13…14 дюймов
Michael
9
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Карта сайта