5.0 KiB
5.0 KiB
🧪 Руководство по тестированию MyGoServer
Быстрый старт
Способы запуска тестов:
-
Через Makefile (рекомендуется):
make test # Все тесты make test-unit # Только unit тесты make test-coverage # Тесты с покрытием make test-race # С race detector -
Через скрипты:
./scripts/test.sh # Все тесты с отчетом ./scripts/test.sh "TestName" # Конкретные тесты -
Ручной запуск:
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