PHPUnit + Sonarqube导出的覆盖范围与实际的xml结果不匹配

时间:2015-10-22 12:57:31

标签: phpunit sonarqube

sonarqube:5.1.2 声纳 - 跑步者:2.2.1 php插件:2.6 PHPUnit 4.2.6

我们在我们的应用程序上运行phpunit,但是我无法按预期在声纳上获得正确的覆盖率。

在我的phpunit.xml中,我们有过滤器,用于定义我们只想覆盖的文件夹。

<whitelist addUncoveredFilesFromWhitelist="false">
            <directory>./site-library-php/src/main/php/BabelCentral/Model/Content</directory>
        </whitelist>

在我的声纳属性中

sonar.modules=php-module
php-module.sonar.phpUnit.coverage.analyzeOnly=true
php-module.sonar.phpUnit.analyzeOnly=true
php-module.sonar.php.tests.reportPath=site-main-php/src/test/target/reports/phpunit.xml
php-module.sonar.php.coverage.reportPath=site-main-php/src/test/target/reports/phpunit.coverage.xml

查看jenkins上的日志,测试似乎运行正常,结束于:

Tests: 1479, Assertions: 4165, Failures: 58, Incomplete: 14, Skipped: 55.

Generating code coverage report in Clover XML format ... done

Generating code coverage report in HTML format ... done
// further down
11:47:51.973 INFO  - Analyzing PHPUnit test report: site-main-php/src/test/target/reports/phpunit.xml with org.sonar.plugins.php.phpunit.PhpUnitResultParser@35e7e715
11:47:52.604 INFO  - Analyzing PHPUnit unit test coverage report: site-main-php/src/test/target/reports/phpunit.coverage.xml with PHPUnit Unit Test Coverage Result Parser

一切似乎都运作良好。但是,声纳会报告不同的结果,覆盖整个源文件夹。这些是仪表板上显示的数字。

Unit Tests Coverage 1.8%
line coverage 1.8%
Unit test success 95.9% 

是否有声纳尊重phpunit配置的过滤器?

注意: 如果我明确设置

,我就可以在覆盖范围内达到所需的数字
php-module.sonar.sources

到我想要的目录/文件。就是这样,逗号分隔的配置很难管理,而不是phpunit的xml配置。

1 个答案:

答案 0 :(得分:0)

定义SonarQube应该分析的源文件集是至关重要的:它应用于这组文件,应用编码规则并计算度量。 因此sonar.sources是强制属性,是配置源文件集的主要方式。

其他属性可用于优化源文件集:

  • 您可以配置sonar.tests:测试文件会自动从sonar.sources排除。
  • 您可能必须使用sonar.exclusions排除其他一些PHP文件,例如依赖项或生成的代码。

您还应该知道,有几个插件可能会对项目的全局覆盖做出贡献:如果您安装了JavaScript插件,并且sonar.sources包含JavaScript文件,那么在计算覆盖率指标时也会考虑这些插件

如果您只想调整覆盖率,则可以使用sonar.coverage.exclusions从覆盖率指标中排除文件。