Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад

Как можно определить, что часть метода покрыта тестами, а часть — нет?

Этот вопрос проверяет понимание инструментов анализа покрытия кода тестами и умение интерпретировать их отчеты для выявления непротестированных участков кода.

Короткий ответ

Чтобы определить, какая часть метода покрыта тестами, а какая нет, используют инструменты анализа покрытия кода. Эти инструменты запускают ваши тесты и отслеживают, какие строки, ветки или условия были выполнены. Результат представляется в виде отчета, где непокрытый код обычно подсвечивается красным или серым цветом. Таким образом, вы можете визуально увидеть, какие участки метода остались непротестированными.

Длинный ответ

Определение покрытия кода тестами — это ключевая практика для оценки качества тестового набора. Инструменты покрытия кода (coverage tools) инструментируют ваш код во время выполнения тестов, чтобы отследить, какие его части были задействованы.

Как это работает

При запуске тестов с включенным сбором покрытия, инструмент (например, Istanbul для JavaScript, coverage.py для Python) отслеживает выполнение каждой строки кода, каждого условия (if/else) и каждой ветки программы. После выполнения формируется отчет.

Типы покрытия и что они показывают

  • Покрытие строк (Line Coverage): Показывает, была ли выполнена конкретная строка кода. Непокрытая строка в методе — явный признак отсутствия теста для этого пути выполнения.
  • Покрытие веток (Branch Coverage): Более строгий показатель. Он показывает, были ли протестированы обе возможные ветки условия (например, и if, и else). Если в методе есть условный оператор, и тесты проходят только по одной ветке, инструмент укажет на непокрытую ветку.
  • Покрытие функций (Function Coverage): Показывает, была ли вызвана каждая функция или метод.

Практический пример с отчетом

Рассмотрим простой метод на Python и отчет о покрытии.

# calculator.py
def divide(a, b):
    if b == 0:
        return "Cannot divide by zero"  # Ветка 1
    return a / b                         # Ветка 2
# test_calculator.py
import pytest
from calculator import divide

def test_divide_normal():
    assert divide(10, 2) == 5  # Тестирует только ветку 2

Запустив pytest --cov=calculator, вы можете получить отчет:

Name            Stmts   Miss  Cover   Missing
---------------------------------------------
calculator.py       4      1    75%   3

Строка "Missing: 3" указывает, что строка 3 (return "Cannot divide by zero") не была выполнена. Более детальный HTML-отчет наглядно подсветит эту строку красным цветом, показывая, что ветка обработки нулевого делителя не покрыта тестами.

Где и как применяется

Анализ покрытия используется в CI/CD пайплайнах для установления порогов покрытия (например, не менее 80%), что предотвращает слияние кода с недостаточным тестированием. Разработчики используют его локально для поиска "слепых зон" в своих тестах перед коммитом.

Вывод: Инструменты анализа покрытия кода — это необходимый механизм для объективной оценки полноты тестов. Их стоит применять постоянно в процессе разработки, чтобы выявлять непротестированные логические ветки и сложные краевые случаи в методах, тем самым повышая надежность кода.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Testing

  • PyTest

Ключевые слова

#code coverage

#unit testing

#test coverage

#branch coverage

#line coverage

Подпишись на Java Developer в телеграм