Ответ
Покрытие кода измеряется с помощью специализированных инструментов, которые отслеживают, какие строки, ветви или методы были выполнены во время прогона тестов. Это ключевая метрика для оценки полноты тестового набора.
Основные метрики покрытия:
- Покрытие строк (Statement Coverage): Процент исполненных строк исходного кода.
- Покрытие ветвей (Branch Coverage): Процент протестированных возможных путей выполнения (например, условия
if/else). Более строгая метрика. - Покрытие методов (Function/Method Coverage): Процент вызванных методов или функций.
Популярные инструменты:
- Java: JaCoCo, Cobertura
- Python:
pytest-cov(на базе Coverage.py) - JavaScript/TypeScript: Istanbul (часто через
nyc), Jest встроенный
Пример для Python с pytest и pytest-cov:
-
Код (
math_ops.py):def add(a, b): return a + b def is_positive(num): if num > 0: return True else: return False -
Тест (
test_math_ops.py):from math_ops import add, is_positive def test_add(): assert add(2, 3) == 5 def test_is_positive_true(): assert is_positive(5) is True # Тест для ветки `else` отсутствует -> неполное покрытие ветвей -
Запуск и отчёт:
pytest --cov=math_ops --cov-report=term-missing test_math_ops.pyВывод покажет процент покрытия и конкретные непокрытые строки.
Важно: 100% покрытие не гарантирует отсутствие ошибок, но помогает выявить явно непротестированные участки кода. Его следует сочетать с другими техниками (тестирование граничных значений, свойств и т.д.).