У меня есть все эти инструменты, которые сообщают о том же покрытии с JaCoCo: покрытие линий 69% и покрытие филиалов 23%.

Примечание. Снимки экрана были сделаны в течение нескольких дней, поэтому они имеют немного разные значения, но разница составляет & lt; 1%

Дженкинс: jenkins

Maven: maven

Затмение: eclipse

Однако сонар сообщает разные значения:

sonar

Проект Maven имеет следующую структуру:

  • основной (агрегатор)
    • модуль Java
    • модуль js (узел)

Вы можете увидеть такое же покрытие, указанное для основного и java-модулей, и отсутствие покрытия для js-модуля.

Modules

Я использую последние версии jacoco, jacoco-maven-plugin и сонара Java Plugin.

Вот соответствующие фрагменты журнала сборки из mvn sonar:sonar - вроде все в порядке:

$ egrep -i 'jacoco|\[warn]' consoleText
[WARN] [04:34:29.569] 'sonar.dynamicAnalysis' is deprecated since version 4.3 and should no longer be used.
[WARN] [04:34:29.576] 'sonar.dynamicAnalysis' is deprecated since version 4.3 and should no longer be used.
[WARN] [04:34:29.593] 'sonar.dynamicAnalysis' is deprecated since version 4.3 and should no longer be used.
[INFO] [04:34:32.704] JaCoCoItSensor: JaCoCo IT report not found: /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/jacoco-it.exec
[WARN] [04:34:32.952] Bytecode of dependencies was not provided for analysis of test files, you might end up with less precise results. Bytecode can be provided using sonar.java.test.libraries property
[WARN] [04:34:50.101] Cobertura report not found at /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/site/cobertura/coverage.xml
[INFO] [04:35:03.391] Sensor JaCoCoSensor
[INFO] [04:35:03.406] Analysing /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/jacoco.exec
[INFO] [04:35:03.712] Sensor JaCoCoSensor (done) | time=321ms
[INFO] [04:35:03.712] Sensor JaCoCoOverallSensor
[INFO] [04:35:03.714] Analysing /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/jacoco.exec
[INFO] [04:35:03.762] Analysing /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/sonar/jacoco-overall.exec
[INFO] [04:35:03.906] Sensor JaCoCoOverallSensor (done) | time=194ms
[INFO] [04:35:11.013] JaCoCoSensor: JaCoCo report not found : /home/acme/workspace/example-Sonar-DSL/modules/frontend/target/jacoco.exec
[INFO] [04:35:11.013] JaCoCoItSensor: JaCoCo IT report not found: /home/acme/workspace/example-Sonar-DSL/modules/frontend/target/jacoco-it.exec
[INFO] [04:35:11.179] JaCoCoSensor: JaCoCo report not found : /home/acme/workspace/example-Sonar-DSL/target/jacoco.exec
[INFO] [04:35:11.179] JaCoCoItSensor: JaCoCo IT report not found: /home/acme/workspace/example-Sonar-DSL/target/jacoco-it.exec

Это ошибка в подключаемом модуле Java Sonar? Я думаю, что маловероятно, что метрика, сообщаемая сонаром, верна, когда 3 других инструмента, настроенных разными людьми, постоянно показывают разные значения.

4
Jakub Bochenski 29 Апр 2016 в 19:05

2 ответа

Лучший ответ

Похоже, показатель охвата исправился. Теперь он сообщает правильные значения - кстати, в тот же день мы обновили JDK до последней версии патча (8u92).

Это говорит о том, что датчик JaCoCo работает неправильно в зависимости от JRE, но требует дополнительных исследований.

coverage trend

0
Jakub Bochenski 9 Май 2016 в 15:11

Вот как вычисляется показатель «Покрытие модульных тестов»:

  • NUMBER_OF_LINES = количество строк + количество условий.
  • COVERED_LINES = NUMBER_OF_LINES - (количество непокрытых строк + количество непокрытых условий.

ПОКРЫТИЕ = (100 * COVERED_LINES) / NUMBER_OF_LINES.

2
Julien L. - SonarSource Team 3 Май 2016 в 09:07