feat: добавлены инструменты анализа покрытия тестами

- Создан скрипт scripts/coverage.sh для автоматизированного анализа
- Добавлена документация COVERAGE.md с детальным анализом
- Текущее покрытие: 9.6% (низкое, нуждается в улучшении)

Инструменты:
- go test ./... -cover - быстрый анализ
- go tool cover -func=coverage.out - детальная статистика
- ./scripts/coverage.sh --html - HTML отчет
- ./scripts/coverage.sh --threshold=80 - с порогом покрытия

Рекомендации по улучшению:
1. Handlers (0% покрытия) - приоритет 1
2. Service Layer (0% покрытия) - приоритет 1
3. Middleware (0% покрытия) - приоритет 2
4. Repository (24.5% покрытия) - приоритет 2
5. Config & Database (0% покрытия) - приоритет 3

Цель: довести покрытие до 70%+
This commit is contained in:
2025-08-27 17:51:59 +04:00
parent 225635ed4b
commit c8224f072a
3 changed files with 3252 additions and 0 deletions

103
core-service/scripts/coverage.sh Executable file
View File

@@ -0,0 +1,103 @@
#!/bin/bash
# Скрипт для анализа покрытия тестами
# Использование: ./scripts/coverage.sh [--html] [--threshold=80]
set -e
# Параметры по умолчанию
GENERATE_HTML=false
COVERAGE_THRESHOLD=80
# Парсим аргументы
while [[ $# -gt 0 ]]; do
case $1 in
--html)
GENERATE_HTML=true
shift
;;
--threshold=*)
COVERAGE_THRESHOLD="${1#*=}"
shift
;;
*)
echo "Неизвестный параметр: $1"
echo "Использование: $0 [--html] [--threshold=80]"
exit 1
;;
esac
done
echo "🧪 Анализ покрытия тестами..."
echo ""
# Запускаем тесты с покрытием
go test ./... -coverprofile=coverage.out
# Получаем общую статистику покрытия
TOTAL_COVERAGE=$(go tool cover -func=coverage.out | tail -1 | awk '{print $3}' | sed 's/%//')
echo ""
echo "📊 Общая статистика покрытия:"
echo "┌─────────────────────────────────────────────────────────────┐"
echo "│ Пакет │ Покрытие │ Статус │"
echo "├─────────────────────────────────────────────────────────────┤"
# Анализируем покрытие по пакетам
go test ./... -cover | while read -r line; do
if [[ $line =~ coverage:\ ([0-9.]+)% ]]; then
PACKAGE=$(echo "$line" | awk '{print $1}')
COVERAGE=$(echo "$line" | grep -o '[0-9.]*%' | head -1)
COVERAGE_NUM=$(echo "$COVERAGE" | sed 's/%//')
if (( $(echo "$COVERAGE_NUM >= $COVERAGE_THRESHOLD" | bc -l) )); then
STATUS="✅ Хорошо"
elif (( $(echo "$COVERAGE_NUM > 0" | bc -l) )); then
STATUS="⚠️ Низкое"
else
STATUS="❌ Нет тестов"
fi
printf "│ %-25s │ %8s │ %-20s │\n" "$PACKAGE" "$COVERAGE" "$STATUS"
fi
done
echo "└─────────────────────────────────────────────────────────────┘"
echo ""
# Проверяем общее покрытие
if (( $(echo "$TOTAL_COVERAGE >= $COVERAGE_THRESHOLD" | bc -l) )); then
echo "🎉 Общее покрытие: ${TOTAL_COVERAGE}% (>= ${COVERAGE_THRESHOLD}%)"
COVERAGE_STATUS=0
else
echo "⚠️ Общее покрытие: ${TOTAL_COVERAGE}% (< ${COVERAGE_THRESHOLD}%)"
echo "💡 Рекомендуется увеличить покрытие тестами"
COVERAGE_STATUS=1
fi
# Генерируем HTML отчет если запрошено
if [ "$GENERATE_HTML" = true ]; then
echo ""
echo "📄 Генерация HTML отчета..."
go tool cover -html=coverage.out -o coverage.html
echo "✅ HTML отчет сохранен в coverage.html"
echo "🌐 Откройте coverage.html в браузере для детального просмотра"
fi
# Показываем функции с низким покрытием
echo ""
echo "🔍 Функции с низким покрытием (< 50%):"
go tool cover -func=coverage.out | grep -E "0\.0%|^[0-9]+\.[0-9]+%" | head -10
# Очищаем временные файлы
rm -f coverage.out
echo ""
echo "📈 Рекомендации по улучшению покрытия:"
echo "1. Добавьте unit тесты для handlers (сейчас 0% покрытия)"
echo "2. Добавьте unit тесты для service layer (сейчас 0% покрытия)"
echo "3. Добавьте unit тесты для middleware (сейчас 0% покрытия)"
echo "4. Добавьте unit тесты для config и database (сейчас 0% покрытия)"
echo "5. Улучшите покрытие repository layer (сейчас 24.5%)"
exit $COVERAGE_STATUS