phpunit - 如何使用 pcov 获得代码覆盖率报告?
问题描述
我使用 PHP 8.0.5、PHPUnit 9.5.4、PHPStorm 2021.1.2。当在我的 XML 配置文件中,我使用这个:
<coverage pathCoverage="true">
<report>
<clover outputFile="./coverage.xml"/>
</report>
</coverage>
(这只是我文件的相关部分)
...并从 PHPStorm 启动命令“Run with coverage”,它不会生成覆盖率报告。
我已停用 XDebug。PHPStorm 向我展示:
警告:必须设置 XDEBUG_MODE=coverage 或 xdebug.mode=coverage
我不知道为什么它提到 XDebug,因为我想使用 pcov,因为我在“运行/调试配置”弹出窗口中设置了它。我尝试将报告放在另一个文件夹中,尝试生成 HTML 报告...通过终端启动命令...这些都不起作用。我在 Google 上没有找到任何关于我的问题的信息。
编辑
我尝试了根本没有加载 XDebug 和这个简化的配置(使用--generate-configuration
参数创建)并添加了前面的代码(没有路径覆盖)。
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
bootstrap="TestBootstrap.php"
cacheResultFile=".phpunit.cache/test-results"
executionOrder="depends,defects"
forceCoversAnnotation="true"
beStrictAboutCoversAnnotation="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
failOnRisky="true"
failOnWarning="true"
verbose="true">
<testsuites>
<testsuite name="default">
<directory suffix="Test.php">./src/BlocksTest.php</directory>
</testsuite>
</testsuites>
<coverage cacheDirectory=".phpunit.cache/code-coverage"
processUncoveredFiles="true">
<include>
<directory suffix=".php">../src</directory>
</include>
<report>
<clover outputFile="./coverage.xml"/>
</report>
</coverage>
</phpunit>
即使图书馆说它仍然不起作用:
生成 Clover XML 格式的代码覆盖率报告...
解决方案
当然有很多方法可以回答这个问题,在我们寻找答案的同时,我留下了一些初稿。
您的 Phpunit XML 配置:
<coverage pathCoverage="true"> <report> <clover outputFile="./coverage.xml"/> </report> </coverage>
是与pathCoverage
属性true
值。
[在 Phpunit 9.5 中] pathCoverage 属性[...] 当设置为 true [..] 这需要支持路径覆盖的代码覆盖驱动程序。Path Coverage 目前仅由 Xdebug 实现。
所以你不能用 pcov 得到这个代码覆盖率报告。
您的 Phpunit 配置不兼容。
当 Phpunit(通过sebastianbergman/php-code-coverage)显示此警告时:
警告:必须设置 XDEBUG_MODE=coverage 或 xdebug.mode=coverage
这意味着它检测到 xdebug 扩展可用,但未配置为使用它,因此提示要更改哪些参数。
如果您在命令行 (CLI) 上使用 xdebug 模式环境参数重放最后一个命令,通常最容易进行测试运行:
$ XDEBUG_MODE=coverage !! # press enter
否则这两个选项中的任何一个都适用于 PHP,请适当地配置运行作业。
但是,如果您不关心 xdebug 而是关心 pcov
我不知道为什么它提到 XDebug,因为我想使用 pcov,因为我在 "Run/Debug Configurations" popin 中设置它 [in PhpStorm]。
关于 xdebug 配置的警告讲述了一个不同的故事:xdebug 和 pcov 是互斥的,并且
如果您想使用 PCOV 作为 php-code-coverage 的驱动程序,则不得加载Xdebug 。
这意味着 - 正如原始警告显示 Xdebug已加载 - 它必须首先被卸载。
PhpStorm无法卸载配置的 PHP 版本的扩展。它的作用是根据您的选择添加扩展和配置设置。
在与命令行 (CLI) 类似的 PhpStorm 中,您可以控制 PHP 可执行文件的环境参数和命令行参数。
如果系统上 php 可执行文件的现有配置已经加载太多,作为最后的手段,您可以先使用-n
开关禁用所有扩展,然后根据需要添加扩展。
-d extension=<extension>
[ ini.extension ]
像 xdebug 这样的一些扩展需要作为 zend 扩展加载:
-d zend_extension=<zend_extension>
[ ini.zend-扩展]
有关 PHP 命令行选项的描述,请参阅命令行选项[DOCS]。
有关各种配置选项的说明,请参阅:
php.ini
PHP 发行版附带的注释文件- PHP 手册中的相应页面(它还有一个php.ini 指令列表[DOCS])
- 扩展作者的附加文档,例如Xdebug 主页通常有详细的配置说明并涵盖所有 ini 设置。
推荐阅读
- hazelcast - Hazelcast 谓词在子句中
- git - Visual Studio 2019 中的 Cherry-pick 提交
- ios - 如何将 AVMutableComposition 传递给 AVAssetWriter
- javascript - 如何将表格单元格的 id 发送到 javascript 中的 onclick 函数
- asp.net - .net core B2C / 3rd 方 JWT 验证和授权
- java - 如何使用 RocksDB 尾随迭代器?
- javascript - 如何停止导航,一旦使用jquery在标签上的特定部分执行点击事件
- ruby-on-rails - 如何在 Windows 上升级我的 ruby 版本,我已经使用 railsinstaller 以及 rails 和 gem 安装了它
- swift - 如何使用 Swift 包管理器的 binaryTarget?
- cluster-computing - Mulesoft 本地集群的节点处于“未知”状态