Files
MyGoServer/docs/testing_guide.md

206 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧪 Руководство по тестированию 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
```