测试覆盖率

需要 XDebug 3.0+PCOV

测试覆盖率(或代码覆盖率)是一种用于衡量测试期间执行的代码百分比的指标。这可以帮助开发人员识别其代码中可能未经测试或覆盖率低的代码部分,表明存在潜在的 bug 和其他问题的风险。

通常,收集代码覆盖率的基本配置已经存在于框架提供的 phpunit.xml 文件中,或者可以通过执行 ./vendor/bin/pest --init 命令生成。如果您的 phpunit.xml 文件中不存在代码覆盖率配置,您可以添加自己的配置来指定项目中应接收代码覆盖率报告的路径。

1...
2<source>
3 <include>
4 <directory suffix=".php">./app</directory>
5 </include>
6</source>
7...

除了配置 phpunit.xml 文件外,您还需要安装 XDebug 3.0+PCOV 来生成代码覆盖率报告。当使用 XDebug 时,必须将 XDEBUG_MODE 环境变量配置为 coverage

配置好代码覆盖率设置并安装覆盖率驱动程序后,使用 --coverage 选项即可轻松生成代码覆盖率报告。

1./vendor/bin/pest --coverage

通过使用 --coverage 选项,测试套件会正常运行,但会额外显示项目文件列表及其相应的覆盖率结果。

如果当前测试套件中存在任何未覆盖的行,它们将以红色突出显示并使用相应的行号显示。多行未覆盖的行之间将用两个点 (..) 分隔。例如,如果第 52 行到第 60 行之间缺少覆盖率,您将看到红色显示的 52..60 而不是仅显示 52

最低阈值执行

为了确保全面的测试并维护代码质量,为覆盖率结果设置最低阈值至关重要。在 Pest 中,您可以使用 --coverage--min 选项来定义覆盖率结果的最低阈值。如果未达到指定的阈值,Pest 将报告失败。

1./vendor/bin/pest --coverage --min=90

忽略代码

如果应用程序的某些部分无法进行测试,并且应从代码覆盖率分析中排除,则可以在源代码中使用 @codeCoverageIgnoreStart@codeCoverageIgnoreEnd 注释来实现。

1// @codeCoverageIgnoreStart
2function getUsers() {
3 //
4}
5// @codeCoverageIgnoreEnd

不同格式

Pest 支持各种代码覆盖率报告格式

  • --coverage-clover <file>:将代码覆盖率报告保存为 Clover XML 格式到指定文件。
  • --coverage-cobertura <file>:将代码覆盖率报告保存为 Cobertura XML 格式到指定文件。
  • --coverage-crap4j <file>:将代码覆盖率报告保存为 Crap4J XML 格式到指定文件。
  • --coverage-html <dir>:将代码覆盖率报告保存为 HTML 格式到指定目录。
  • --coverage-php <file>:序列化代码覆盖率数据并将其保存到指定文件。
  • --coverage-text <file>:将代码覆盖率报告保存为文本格式到指定文件。(默认:php://stdout)
  • --coverage-xml <dir>:将代码覆盖率报告保存为 XML 格式到指定目录。

在本章中,我们讨论了测试覆盖率及其帮助确定实际测试的应用程序百分比的能力。在下一章中,我们将深入探讨 Pest 的类型覆盖率插件:类型覆盖率