# 🧪 Руководство по тестированию MyGoServer ## Быстрый старт ### Способы запуска тестов: 1. **Через Makefile (рекомендуется)**: ```bash make test # Все тесты make test-unit # Только unit тесты make test-coverage # Тесты с покрытием make test-race # С race detector ``` 2. **Через скрипты**: ```bash ./scripts/test.sh # Все тесты с отчетом ./scripts/test.sh "TestName" # Конкретные тесты ``` 3. **Ручной запуск**: ```bash go test ./... # Все тесты go test -v ./internal/apiserver/... # Verbose вывод go test -race ./... # С race detector ``` ## Детальное руководство ### 📊 Покрытие кода (Coverage) ```bash # Генерация отчета о покрытии go test -coverprofile=coverage.out ./... go tool cover -html=coverage.out -o coverage.html # Просмотр покрытия в терминале go tool cover -func=coverage.out ``` ### 🏁 Race Detector Поиск гонок данных (data races): ```bash go test -race ./... # Для более глубокой проверки go test -race -count=10 ./... ``` ### 📈 Benchmark тесты Для измерения производительности: ```bash go test -bench=. -benchmem ./... # Для конкретных функций go test -bench=BenchmarkHomeHandler -benchmem ./internal/apiserver/... ``` ### 🎯 Запуск по паттернам ```bash # Только тесты с определенным именем go test -run TestHome ./... # Исключить некоторые тесты go test -run '^(?!TestIntegration).*' ./... # Искать по нескольким паттернам go test -run 'TestHome|TestConfig' ./... ``` ### 🔄 Непрерывное тестирование Для разработки с автоперезапуском тестов: ```bash # Установка gotest-watcher go install github.com/bitfield/gotest@latest # Автоматический запуск тестов при изменении файлов gotest -w ./... ``` ### 📊 Отчеты и анализ #### HTML отчет о покрытии: - `coverage.html` - веб-интерфейс покрытия - `coverage.out` - данные покрытия #### JSON отчет (для CI/CD): ```bash go test -json ./... > test-report.json ``` #### Логи в файл: ```bash 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/ # Статические данные ``` ## 🔧 Настройка окружения тестирования ### Переменные окружения: ```bash export TEST_ENV=development export LOG_LEVEL=debug export CONFIG_PATH=./configs/development.toml ``` ## 📝 Примеры тестов ### Базовый тест: ```go 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) } } ``` ### Тест с моками: ```go func TestConfig_Load(t *testing.T) { // Мок конфигурации cfg := &Config{ Server: ServerConfig{ Address: ":8080", }, } if cfg.Server.Address != ":8080" { t.Error("Config not loaded correctly") } } ``` ### Benchmark тест: ```go 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) } } ``` ## 🚀 Быстрые команды ```bash # Проверка всех аспектов качества кода make test-coverage && make vet && make fmt # Быстрый цикл разработки make test-watch # Полная проверка проекта make build && make test-race && make lint # Тестирование конкретного компонента make test-pattern PATTERN=TestHome ```