Когда я запускаю модульные тесты с агентом Jacoco, есть некоторое несоответствие между моим местным докладом Jacoco и покрытием SonarQube. Похоже, что это влияет только на файлы, содержащие вложенные классы. Отчет, созданный локально, содержит информацию о покрытии для внешнего класса и всех внутренних классов, но данные покрытия на SonarQube включают только внутренние классы.Покрытие SonarQube отсутствует в некоторых строках, на которые ссылается отчет Jacoco
Например, Foo.java содержит внешний класс, Foo и внутренние классы, Bar и Baz.
В моем локальном отчете показано покрытие 26% для класса Foo, 46% для класса Foo.Bar и 0% для класса Foo.Baz; общий охват обучения для Foo.java составляет 30%. Страница покрытия SonarQube дает покрытие линии 15% для Foo.java. Я понимаю, что покрытие линии не соответствует охвату инструкций, но я бы ожидал, что цифры будут ближе. При дальнейшей проверке я заметил, что в файловом обзоре Foo.java на SonarQube все строки во внешнем классе Foo отмечены как «Не охвачены модульными тестами», а единственными строками, отмеченными закрытыми, являются те, что указаны в Foo Я ожидал. Это различие составляет примерно 15% разрыв между докладом Jacoco и SonarQube. Я не вижу никаких исключений в локальных журналах сканера или журналах анализа сервера.
Я работаю с JaCoCo 0.7.7.201606060606, Java версии 1.8.0_73 и сонар-сканером 2.8 локально. На сервере запущена версия Java версии 1.8.0_66-b17, версия SonarQube версии 5.6.3 и версия плагина SonarQube Java 4.2.1.6971.
Я был бы признателен за любые предложения и был бы рад предоставить более подробную информацию, если бы это было полезно.
Спасибо за указатели и за отзыв! Я понимаю, что ожидается, что покрытие линий и инструкций будет отличаться. Большую озабоченность вызывают различия в покрытых линиях в SonarQube и JaCoCo для Foo.java. Оказывается, они использовали разные файлы классов для выполнения анализа, как я объясняю в своем ответе. Извините, что беспокою вас! –