Как запустить все тесты в проекте Go с помощью `go test`?
Основной способ: команда go test ./...
Самый правильный и распространённый способ запустить все тесты во всём проекте (включая подпапки) — это использовать команду:
go test ./...
Символ ./... означает "текущая директория и все её поддиректории рекурсивно". Go автоматически найдёт все файлы, оканчивающиеся на _test.go, и выполнит их.
Почему возникает ошибка "no test files"?
Ошибка go: no test files появляется, когда Go находит пакет, в котором нет ни одного тестового файла. Например, если в корне проекта нет *_test.go, то команда go test ./... выведет предупреждение для этого пакета. Это не критично, но засоряет вывод.
Чтобы избежать этой ошибки, используйте флаг -count=1 (для принудительного запуска без кэширования) или просто игнорируйте её. Однако есть более элегантное решение — фильтрация пакетов с помощью go list:
go test $(go list ./... | grep -v /vendor/)
Но для новичков проще использовать:
go test ./... 2>/dev/null
Это скроет ошибки (но и другие сообщения тоже).
Дополнительные полезные флаги
-v— подробный вывод (показывает название каждого теста).-run <pattern>— запуск только тестов, чьё имя соответствует регулярному выражению.-count=1— отключает кэширование результатов (полезно при разработке).-cover— показывает процент покрытия кода тестами.-short— запуск только "коротких" тестов (если вы пометили их какt.Short()).
Примеры использования
1. Запустить все тесты с подробным выводом:
go test -v ./...
2. Запустить только тесты, содержащие "Helper" в имени:
go test -v -run Helper ./...
3. Запустить тесты с отчётом о покрытии:
go test -cover ./...
4. Запустить тесты для конкретного пакета (например, utils):
go test ./utils/...
Что делать, если тесты не запускаются?
- Убедитесь, что файлы названы по шаблону
*_test.go. - Проверьте, что в тестовых файлах есть функции вида
func TestXxx(t *testing.T). - Попробуйте очистить кэш:
go clean -testcache. - Если используете модули (go.mod), убедитесь, что они корректно инициализированы.
Рекомендация для вашей структуры
Для вашего проекта команда будет такой:
go test -v -count=1 ./...
Она запустит тесты в корне, utils и api. Если в корне нет тестов, просто проигнорируйте сообщение об ошибке — это нормально.
Альтернативный подход: Makefile или скрипты
Если вы часто запускаете тесты и хотите избежать длинных команд, создайте Makefile в корне проекта:
# Makefile
.PHONY: test
test:
go test -v -count=1 ./...
Теперь достаточно набрать make test.
Использование go test -list
Если нужно только посмотреть, какие тесты есть во всех пакетах, но не запускать их:
go test -list . ./...
Запуск тестов с параллелизмом
Go автоматически запускает тесты в разных пакетах параллельно. Если нужно ограничить количество параллельных процессов (например, из-за ресурсов), используйте флаг -p:
go test -p 2 ./...
Это запустит не более 2 тестовых пакетов одновременно.
Ошибка "package is not in GOROOT"
Если вы видите эту ошибку, значит вы не используете модули. Инициализируйте модуль:
go mod init myproject
После этого команда go test ./... будет работать корректно.
Заключение
Самый надёжный вариант для новичка — go test -v ./.... Он запустит все тесты во всех подпакетах и покажет детали. Ошибки типа "no test files" — это не проблема, просто Go сообщает, что в некоторых папках нет тестов. Со временем вы привыкнете к этому.
Ответов пока нет.
Войдите чтобы оставить ответ