Go ценят не только за простоту языка, но и за сильную встроенную экосистему тестирования. Здесь не нужно сразу тянуть тяжелые фреймворки: базовые задачи закрываются стандартной библиотекой. Это ускоряет разработку, упрощает CI/CD и делает код предсказуемее.
Пакет `testing` — основа всего
Для unit-тестов в Go используется пакет `testing`. Тестовые файлы создаются с суффиксом `_test.go`, а функции должны начинаться с `Test`.
func TestSum(t *testing.T) {
got := Sum(2, 3)
want := 5
if got != want {
t.Errorf("got %d, want %d", got, want)
}
}
Запуск:
go test
Табличные тесты — стандарт де-факто
Один из самых популярных подходов в Go — table-driven tests. Он помогает компактно проверять несколько сценариев сразу.
Плюсы:
- меньше дублирования
- проще поддержка
- удобно добавлять новые кейсы
Покрытие кода тестами 📊
Go умеет показывать coverage без сторонних инструментов:
go test -cover
Если нужен детальный отчет:
go test -coverprofile=cover.out
go tool cover -html=cover.out
Это полезно для поиска непротестированных участков, но важно помнить: 100% coverage не гарантирует качество тестов.
Benchmark-тесты для производительности 🚀
Встроенные бенчмарки помогают измерять скорость выполнения функций.
func BenchmarkSum(b *testing.B) {
for i := 0; i < b.N; i++ {
Sum(2, 3)
}
}
Запуск:
go test -bench=.
Это особенно важно для API, highload-сервисов, работы с памятью и оптимизации алгоритмов.
Примерные тесты `Example` 📘
Go поддерживает примеры, которые одновременно служат документацией и могут проверяться автоматически. Это удобно для библиотек и SDK.
Subtests и selective run
С помощью `t.Run()` можно группировать сценарии внутри одного теста и запускать только нужные:
go test -run TestName
Это экономит время при отладке и работе с крупными проектами.
Полезные практики ✅
- тестируйте публичное поведение, а не внутреннюю реализацию
- используйте понятные имена тестов
- добавляйте edge cases: пустые значения, nil, ошибки, границы диапазонов
- держите тесты быстрыми и независимыми
Главное преимущество тестирования в Go — встроенность. `testing`, coverage, benchmarks и examples уже есть “из коробки”, поэтому начать можно сразу, без лишней настройки. Для большинства команд этого достаточно, чтобы поддерживать качество кода на высоком уровне и быстрее выпускать изменения в продакшен.
👀 Заодно посмотрите подборку каналов про IT — там много полезного по Go, backend-разработке, DevOps и инженерным практикам.