← Назад к вопросам

Как запустить определённый набор тестов?

2.0 Middle🔥 181 комментариев
#Тестирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы запуска конкретных тестов в Go

Основные способы запуска тестов

В Go существует несколько эффективных способов запуска конкретных тестов, которые позволяют оптимизировать процесс разработки и отладки.

1. Запуск тестов конкретного пакета

Для запуска всех тестов в текущем пакете используйте стандартную команду:

go test

Для запуска тестов в конкретном пакете:

go test ./mypackage
go test github.com/user/project/mypackage

2. Запуск конкретной тестовой функции

Для запуска определенной тестовой функции используйте флаг -run с регулярным выражением:

go test -run TestFunctionName
go test -run "^TestMyFunction$"  # точное совпадение

Например, если у вас есть функция TestCalculateTotal:

func TestCalculateTotal(t *testing.T) {
    // тестовый код
}

Запустить ее можно так:

go test -run TestCalculateTotal

3. Запуск группы тестов

Флаг -run поддерживает регулярные выражения, что позволяет запускать группы тестов:

go test -run "TestCalculate.*"    # все тесты, начинающиеся с TestCalculate
go test -run "Test.*Integration"  # все интеграционные тесты
go test -run "Test.*/v[12]"       # тесты с определенным суффиксом

4. Запуск тестов с подтестами (subtests)

Для Go 1.7+ с поддержкой subtests, можно запускать конкретные подтесты:

func TestUserOperations(t *testing.T) {
    t.Run("CreateUser", func(t *testing.T) {
        // тест создания пользователя
    })
    
    t.Run("DeleteUser", func(t *testing.T) {
        // тест удаления пользователя
    })
}

Запуск конкретного подтеста:

go test -run "TestUserOperations/CreateUser"
go test -run "TestUserOperations/.*"  # все подтесты TestUserOperations

5. Запуск примеров (Examples)

Примеры кода, которые также являются тестами, можно запускать аналогично:

go test -run ExampleFunctionName

Полезные флаги и комбинации

Параллельный запуск тестов

go test -parallel 4 -run "Test.*"  # запуск 4 тестов параллельно

Пропуск кэширования

go test -count=1 -run TestSpecificFunction

Флаг -count=1 отключает кэширование результатов тестов, что полезно при отладке.

Подробный вывод

go test -v -run TestFunctionName  # подробный вывод

Запуск тестов с таймаутом

go test -timeout 30s -run TestLongRunningFunction

Продвинутые сценарии

Запуск тестов по тегам (build tags)

go test -tags integration -run "Test.*"

В коде теста:

//go:build integration
// +build integration

package mypackage

func TestIntegrationScenario(t *testing.T) {
    // интеграционный тест
}

Использование makefile или скриптов

Для сложных сценариев можно создать Makefile:

test-unit:
    go test -run "Test.*" ./...

test-integration:
    go test -tags integration ./...

test-specific:
    go test -run $(TEST_NAME) ./...

Запуск:

make test-specific TEST_NAME="TestCalculateTotal"

Запуск из IDE

В популярных IDE запуск тестов упрощен:

  • VS Code: Правый клик на функции теста → "Run Test"
  • Goland: Зеленая стрелка рядом с функцией теста
  • IntelliJ IDEA: Аналогично GoLand

Практические рекомендации

  • Именование тестов: Используйте осмысленные имена, группируйте тесты по префиксам (TestUnit_, TestIntegration_, TestBenchmark_)
  • Организация тестов: Разделяйте unit-тесты и интеграционные тесты по разным пакетам или используйте build tags
  • Использование табличных тестов: Упрощает запуск конкретных тестовых случаев
  • Кэширование результатов: Go автоматически кэширует результаты успешных тестов, используйте -count=1 для принудительного перезапуска

Пример комплексного использования

Предположим, у нас есть структура тестов:

func TestUser(t *testing.T) {
    t.Run("Create/Valid", func(t *testing.T) { /* ... */ })
    t.Run("Create/InvalidEmail", func(t *testing.T) { /* ... */ })
    t.Run("Delete/Existing", func(t *testing.T) { /* ... */ })
}

func TestProduct(t *testing.T) {
    t.Run("Add/Simple", func(t *testing.T) { /* ... */ })
    t.Run("Add/WithDiscount", func(t *testing.T) { /* ... */ })
}

Запуск конкретных сценариев:

# Только тесты создания пользователей
go test -v -run "TestUser/Create"

# Конкретный тест с отключением кэша
go test -v -count=1 -run "TestUser/Create/InvalidEmail"

# Все тесты пользователей и продуктов
go test -v -run "Test(User|Product)"

Выбор метода запуска зависит от конкретной ситуации: для быстрой отладки подойдет запуск конкретной функции, для CI/CD — более комплексные команды с учетом тегов и параллельного выполнения.