Перейти к содержимому
4 / 15

Что подменять в тестах и чем: интерфейсы у потребителя вместо фреймворков

В Go нет культуры фреймворков для подмены зависимостей, и это следствие устройства языка: интерфейсы реализуются неявно, поэтому подстановка делается вручную и почти бесплатно. Работает это так: потребитель объявляет у себя маленький интерфейс с теми методами, которые ему нужны, а в тест передаёт простую структуру-заглушку. Никакой генерации кода при этом не требуется. Правило, что подменять: всё, что выходит за границу процесса — сеть, файловая система, время, случайность, — и ничего больше. Подмена внутренней логики превращает тест в проверку того, что код вызывает сам себя. Отдельно про время: time.Now подменяют не глобально, а полем структуры или, начиная с Go 1.25, через testing/synctest, где часы фальшивые внутри изолированного пузыря. Генераторы вроде mockgen оправданы на больших интерфейсах, которые вы не контролируете; для своих трёхметодных интерфейсов ручная заглушка короче и понятнее.