Некорректное покрытие с Sonarqube 6.2 и плагином PHP

Недавно я установил SonarQube до версии 6.2. Я заметил, что показатели покрытия кода резко сократились. В деталях покрытия я вижу, что файлы с @codeCoverageIgnore аннотация или интерфейсы имеют открытые линии. Похоже, что сонар вычисляет покрытие по количеству покрытых строк (из выходного журнала PHPUnit xml) за все файлы в каталоге, указанном sonar.sources в sonar-project.properties,

Перед установкой SonarQube на моем сервере я играл с версией 6.1, работающей на официальном образе Docker, и это работало как чудо.

Я не нашел открытых вопросов / тикеров / похожих вопросов, связанных с такой проблемой, поэтому, возможно, я делаю что-то не так.

Подробности:

  • PHPUnit 5.7.5 работает с командой:

phpunit --coverage-clover=build/phpunit.coverage.xml --log-junit=build/phpunit.log.xml

  • SonarQube 6.2 (установлен из официальных репозиториев apt)
  • SonarQube Scanner 2.8
  • PHP-плагин SonarQube 2.9.2.1744

1

Решение

Ваши номера покрытия упали с SonarQube 6.2 и SonarPHP 2.9.2, потому что эта комбинация версий (и выше) передает данные «исполняемых строк», так что покрытие может быть «обнулено» для файлов, которые не включены в отчеты о покрытиях.

И.Е. SonarQube 6.2 разработан, чтобы дать вам более точное представление о том, каков ваш истинный коэффициент покрытия. До этого ему приходилось полагаться на список файлов и строк, передаваемых механизмом покрытия, и многие механизмы покрытия просто игнорировали (то есть не включали в свои отчеты) файлы, в которых ни одна из строк не проверялась. Теперь анализатор кода, в данном случае SonarPHP, передает список исполняемых строк для всех тех файлов, которые игнорируются вашим механизмом покрытия, поэтому у вас есть большее число непокрытых строк и, следовательно, процент покрытия.

Если вы хотите, чтобы ваши номера покрытия вернулись к тому, чем они были, у вас есть два варианта:

  1. напишите больше тестов! ;-п
  2. добавлять исключения для непокрытых файлов
1

Другие решения

Других решений пока нет …