ciltocruz/phpunit-coverage-tools

PHPUnit 覆盖率工具分支

v1.8.0 2024-02-18 09:42 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%,但如果失败则不会exit = 1
  • ApplicationFinishedSubscriber100%代码覆盖率
  • CommandHandler结尾的类的100%代码覆盖率

--clean-up-clover-xml

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

覆盖率太低的示例

Coverage FAIL

覆盖率生成警告的示例

Coverage WARNING

覆盖率通过示例

Coverage WARNING