Зачем нужно тестовое покрытие кода?

«Зачем нужно тестовое покрытие кода?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестовое покрытие (Code Coverage) — это метрика, показывающая, какая часть исходного кода выполняется автоматизированными тестами. Его цель — оценить эффективность тестов, а не быть самоцелью.

Зачем измерять покрытие?

  • Выявление непротестированных участков: Помогает найти ветви логики, оставшиеся без проверки.
  • Контроль качества регрессии: При рефакторинге или добавлении нового функционала тесты с высоким покрытием с большей вероятностью обнаружат поломку.
  • Повышение уверенности в изменениях.

Важные принципы:

  1. Качество важнее количества. 100% покрытие бессмысленных геттеров/сеттеров не равно качественному тестированию.
  2. Фокус на сложной бизнес-логике и пограничных случаях.
  3. Оптимальный уровень обычно находится в диапазоне 70-85%. Выше — часто ведет к избыточным тестам и падению ROI.

Пример (JUnit 5):

@Test
@DisplayName("Сумма двух положительных чисел")
void sumOfTwoPositiveNumbersShouldBeCorrect() {
    Calculator calc = new Calculator();
    int result = calc.add(2, 3);
    assertEquals(5, result, "2 + 3 должно быть равно 5");
}

Покрытие помогает убедиться, что такие тесты проверяют все значимые сценарии работы метода add.