#java #unit-testing #code-coverage #jacoco #clover
#java #модульное тестирование #покрытие кода #jacoco #clover
Вопрос:
Я только что провел анализ покрытия кода в своем проекте с помощью Clover, и результат составляет около 60%. Я провел анализ в том же проекте с Jacoco, и результат составил около 52%. Является ли разница в 8% нормальной? Я и раньше проводил анализ покрытия кода с помощью этих инструментов, и разница никогда не была такой огромной.
Ответ №1:
Пожалуйста, обратите внимание, что Clover и JaCoCo используют разные показатели покрытия кода:
- Clover имеет покрытие метода, оператора и ветви (плюс общий показатель покрытия, который является суммой всех трех)
- JaCoCo имеет покрытие метода, блока кода, строки, ветви и инструкции
Таким образом, вы не можете просто поставить знак равенства между результатами, полученными этими двумя инструментами. Я предлагаю проверять отчеты параллельно, чтобы найти, где самая высокая разница, а затем взглянуть на используемые там конструкции кода, что приводит к такой разнице.
Ох. Кстати. Имейте в виду, что JaCoCo использует инструментарий байтового кода, что означает, что он также будет использовать синтетические методы, созданные компилятором javac и которые не видны в исходном коде.
Комментарии:
1. JaCoCo не использует синтетические методы; он обнаруживает и игнорирует их (за исключением неявных конструкторов без аргументов, которые технически не являются синтетическими). Кроме того, JaCoCo действительно имеет только оператор и покрытие ветвей (см. eclemma.org/jacoco/trunk/doc/counters.html ); остальные (строка, блок кода, метод) — это просто производные показатели.