Как вы тестируете Go-сервис
Вопрос
Расскажите, как устроено тестирование в вашем Go-сервисе: виды тестов, инструменты, что проверяете в CI.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Юнит-тесты: табличные, t.Run, фейки через интерфейсы
HTTP-слой через httptest
Интеграционные с настоящей базой (testcontainers или docker compose), build tags или отдельная команда
go test -race и покрытие в CI, линтеры (golangci-lint)
Бенчмарки для горячих путей, fuzzing для парсеров
goleak и synctest для конкурентного кода
Что могут спросить следом
- Как сделать тесты с базой быстрыми и изолированными?
- Сколько покрытия достаточно?
Разбор
Юнит-тесты табличные, на каждый случай t.Run, независимые случаи помечаю t.Parallel. Зависимости сервиса это маленькие интерфейсы, в тестах передаю фейки, сложные моки генерирую mockgen. HTTP-обработчики проверяю через httptest.NewRecorder, клиентов внешних API через httptest.NewServer с заготовленными ответами. Репозиторий тестирую на настоящем PostgreSQL в testcontainers: один контейнер на пакет в TestMain, каждый тест в своей транзакции с откатом или своей схеме. В CI go test -race -count=1 ./..., покрытие и golangci-lint, а интеграционные отдельной джобой. Для горячего кода бенчмарки с benchstat, для парсеров fuzzing. Конкурентный код проверяю goleak на утечки горутин, а таймауты в Go 1.25 через synctest без реального ожидания. Покрытие смотрю не как цель, а как подсказку, какие ветки забыли.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Тесты, бенчмарки и модули»
- Minimal version selection как в Go modules
- Упрощённый go mod tidy: лишние и недостающие модули
- Сортировка версий по Semantic Versioning на Go
- Что выведет Go: табличный прогон без testing
- testing.B.Loop в Go 1.24
- Что показывает -benchmem
- t.Errorf и t.Fatalf
- Команда запуска тестов с детектором гонок