Тестирование, часть 2. Тестовое покрытие



Code coverage (CC) - метрика, которая показывает, насколько код покрыт тестами.



Как считается СС?

Запускаются тесты и отслеживается, какие классы, методы и строки кода выполнились. Это число делится на общее количество и так получается процент кода, покрытый тестами.



Почему у СС плохая репутация?

Не говорит о качестве тестирования и надёжности системы. Если метод выполнился, это не значит, что он протестирован.

Тестировать get/set методы, конструкторы и классы-конфиги нет необходимости, но из-за жёстких требований по СС приходится писать бесполезные тесты.



Зачем считать СС?

Менеджеры хотят быть в курсе состояния проекта и не хотят смотреть в код. Поэтому их главный инструмент - это метрики, в том числе СС. Так оценивается текущая ситуация и сравниваются релизы.

Качество и надёжность— понятия субъективные. С помощью СС и последующего анализа можно найти компоненты, которые слабо покрыты тестами. Таким образом увеличить надёжность системы.



Какие значения СС нормальные?

Для большинства проектов это 60-80%.



Как посчитать?

1️⃣ Intellij IDEA:

Run → Run with Coverage

По умолчанию IDEA использует свой способ подсчёта, но для java есть ещё 2 библиотеки:

🔸JaCoCo

🔸Emma (не поддерживается с 2013)



Результаты разных библиотек могут отличаться. Если на этапе CI/CD используется JaCoCo, то лучше в IDE тоже использовать JaCoCo. Чтобы поменять:

Run → Edit Configurations... → Code Coverage → Choose coverage runner



2️⃣ Во время сборки.

Те же библиотеки используются в Maven и Gradle плагинах — JaCoCo Plugin, Emma Plugin.



3️⃣ На этапах CI/CD.

JaCoCo Plugin и Emma Plugin доступны для Jenkins, Teamcity, GitLab, Travis и остальных CI серверов.