robiningelbrecht/phpunit-coverage-tools

v1.8.1 2024-08-27 11:29 UTC

README

CI License PHPStan Enabled PHP PHPUnit PHPUnit

此扩展允许您通过使用PHPUnit的Clover XML报告来强制执行最小代码覆盖率。根据给定的阈值,如果覆盖率高于阈值,则测试套件将正常退出;如果覆盖率低于阈值,则测试套件将以代码1退出。这可以在您的持续部署环境中使用,也可以添加到预提交钩子中。

安装

> composer require robiningelbrecht/phpunit-coverage-tools --dev

配置

导航到您的phpunit.xml.dist文件,并添加以下配置以设置默认选项

<extensions>
    <bootstrap class="RobinIngelbrecht\PHPUnitCoverageTools\PhpUnitExtension">
        <parameter name="exitOnLowCoverage" value="0|1"/>
        <parameter name="cleanUpCloverXml" value="0|1"/>
    </bootstrap>
</extensions>

使用方法

就像您通常一样运行测试套件,但添加以下参数

--min-coverage=[INTEGER]

> vendor/bin/phpunit --coverage-clover=path/to/clover.xml -d --min-coverage=100

当分配一个介于0 - 100的整数时,您将强制所有类具有最小代码覆盖率。换句话说,您项目的总覆盖率必须高于此阈值。

--min-coverage=[path/to/min-coverage-rules.php]

 > vendor/bin/phpunit --coverage-clover=path/to/clover.xml -d --min-coverage="path/to/min-coverage-rules.php"

当引用PHP配置文件时,您可以配置更复杂的规则。这允许您对应用程序的关键部分更加严格,而对于不是那么关键的应用程序部分则不那么严格。

例如

<?php 

use RobinIngelbrecht\PHPUnitCoverageTools\MinCoverage\MinCoverageRule;

return [
    new MinCoverageRule(
        pattern: MinCoverageRule::TOTAL,
        minCoverage: 20,
        exitOnLowCoverage: true
    ),
    new MinCoverageRule(
        pattern: 'RobinIngelbrecht\PHPUnitCoverageTools\*',
        minCoverage: 80,
        exitOnLowCoverage: false
    ),
    new MinCoverageRule(
        pattern: 'RobinIngelbrecht\PHPUnitCoverageTools\Subscriber\Application\ApplicationFinishedSubscriber',
        minCoverage: 100,
        exitOnLowCoverage: true
    ),   
    new MinCoverageRule(
        pattern: 'RobinIngelbrecht\PHPUnitCoverageTools\*CommandHandler',
        minCoverage: 100,
        exitOnLowCoverage: true
    ),
];

以下示例将强制

  • 至少20%的总覆盖率
  • 对于命名空间RobinIngelbrecht\PHPUnitCoverageTools中的所有类至少80%的覆盖率,但如果不通过则不会退出 = 1
  • 100%的类ApplicationFinishedSubscriber的代码覆盖率
  • 100%的以CommandHandler结尾的类的代码覆盖率

--clean-up-clover-xml

添加此参数将在应用程序运行完毕后清理生成的Clover文件。

覆盖率太低时的示例

Coverage FAIL

覆盖率生成警告时的示例

Coverage WARNING

覆盖率通过时的示例

Coverage WARNING