Files
MyGoServer/docs/testing_guide.md

5.0 KiB
Raw Blame History

🧪 Руководство по тестированию MyGoServer

Быстрый старт

Способы запуска тестов:

  1. Через Makefile (рекомендуется):

    make test              # Все тесты
    make test-unit         # Только unit тесты
    make test-coverage     # Тесты с покрытием
    make test-race         # С race detector
    
  2. Через скрипты:

    ./scripts/test.sh                    # Все тесты с отчетом
    ./scripts/test.sh "TestName"         # Конкретные тесты
    
  3. Ручной запуск:

    go test ./...                        # Все тесты
    go test -v ./internal/apiserver/...  # Verbose вывод
    go test -race ./...                  # С race detector
    

Детальное руководство

📊 Покрытие кода (Coverage)

# Генерация отчета о покрытии
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html

# Просмотр покрытия в терминале
go tool cover -func=coverage.out

🏁 Race Detector

Поиск гонок данных (data races):

go test -race ./...

# Для более глубокой проверки
go test -race -count=10 ./...

📈 Benchmark тесты

Для измерения производительности:

go test -bench=. -benchmem ./...

# Для конкретных функций
go test -bench=BenchmarkHomeHandler -benchmem ./internal/apiserver/...

🎯 Запуск по паттернам

# Только тесты с определенным именем
go test -run TestHome ./...

# Исключить некоторые тесты
go test -run '^(?!TestIntegration).*' ./...

# Искать по нескольким паттернам
go test -run 'TestHome|TestConfig' ./...

🔄 Непрерывное тестирование

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

# Установка gotest-watcher
go install github.com/bitfield/gotest@latest

# Автоматический запуск тестов при изменении файлов
gotest -w ./...

📊 Отчеты и анализ

HTML отчет о покрытии:

  • coverage.html - веб-интерфейс покрытия
  • coverage.out - данные покрытия

JSON отчет (для CI/CD):

go test -json ./... > test-report.json

Логи в файл:

go test -v ./... > test.log 2>&1

🏗️ Структура тестов

Unit тесты:

internal/apiserver/handlers/
├── home_test.go
├── middleware_test.go
└── ...

internal/apiserver/models/
├── response_test.go
└── ...

Integration тесты:

test/integration/
├── api_test.go
├── server_test.go
└── ...

Файлы конфигурации для тестов:

test/
├── fixtures/           # Тестовые данные
├── helpers/            # Вспомогательные функции
└── testdata/           # Статические данные

🔧 Настройка окружения тестирования

Переменные окружения:

export TEST_ENV=development
export LOG_LEVEL=debug
export CONFIG_PATH=./configs/development.toml

📝 Примеры тестов

Базовый тест:

func TestHomeHandler_ServeHTTP(t *testing.T) {
    handler := handlers.NewHomeHandler()
    
    req := httptest.NewRequest("GET", "/", nil)
    rr := httptest.NewRecorder()
    
    handler.ServeHTTP(rr, req)
    
    if status := rr.Code; status != http.StatusOK {
        t.Errorf("handler returned wrong status code: got %v want %v",
            status, http.StatusOK)
    }
}

Тест с моками:

func TestConfig_Load(t *testing.T) {
    // Мок конфигурации
    cfg := &Config{
        Server: ServerConfig{
            Address: ":8080",
        },
    }
    
    if cfg.Server.Address != ":8080" {
        t.Error("Config not loaded correctly")
    }
}

Benchmark тест:

func BenchmarkHomeHandler_ServeHTTP(b *testing.B) {
    handler := handlers.NewHomeHandler()
    
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        req := httptest.NewRequest("GET", "/", nil)
        rr := httptest.NewRecorder()
        handler.ServeHTTP(rr, req)
    }
}

🚀 Быстрые команды

# Проверка всех аспектов качества кода
make test-coverage && make vet && make fmt

# Быстрый цикл разработки
make test-watch

# Полная проверка проекта
make build && make test-race && make lint

# Тестирование конкретного компонента
make test-pattern PATTERN=TestHome