Phpunit 如何使用pcov生成代码覆盖率报告?

Phpunit 如何使用pcov生成代码覆盖率报告?,phpunit,pcov,Phpunit,Pcov,我使用PHP8.0.5、PHPUnit 9.5.4、PHPStorm 2021.1.2。 在XML配置文件中,我使用以下命令: (这只是我文件的相关部分) …并从PHPStorm启动命令“运行时覆盖”,它不会生成覆盖率报告 我已经停用了XDebug。PHPStorm向我展示了: 警告:必须设置XDEBUG_MODE=coverage或XDEBUG.MODE=coverage 我不知道为什么它会提到XDebug,因为我想使用pcov,因为我在“Run/Debug Configurations”

我使用PHP8.0.5、PHPUnit 9.5.4、PHPStorm 2021.1.2。 在XML配置文件中,我使用以下命令:


(这只是我文件的相关部分)

…并从PHPStorm启动命令“运行时覆盖”,它不会生成覆盖率报告

我已经停用了XDebug。PHPStorm向我展示了:

警告:必须设置XDEBUG_MODE=coverage或XDEBUG.MODE=coverage

我不知道为什么它会提到XDebug,因为我想使用pcov,因为我在“Run/Debug Configurations”popin中设置了它。 我尝试将报告放在另一个文件夹中,尝试生成HTML报告。。。通过终端启动命令。。。这些都不管用。我没有在谷歌上找到关于我的问题的任何信息

编辑 我尝试使用根本没有加载的XDebug和这个简化配置(使用
--generate configuration
参数创建)并添加了前面的代码(没有路径覆盖)


./src/BlocksTest.php
../src
即使图书馆说:

正在生成Clover XML格式的代码覆盖率报告


当然有很多方法可以回答这个问题,在我们找到答案的同时,我留下了一些初稿


您的Phpunit XML配置:

否则,这两个选项中的任何一个都适用于PHP,请适当配置运行作业

但是,如果您不关心xdebug,而是pcov

我不知道为什么它会提到XDebug,因为我想在“Run/Debug Configurations”popin中[在PhpStorm中]设置它时使用pcov

关于xdebug配置的警告讲述了一个不同的故事:和

如果要使用PCOV作为php代码覆盖率的驱动程序,则不得加载Xdebug

<?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>
这意味着-正如原始警告显示Xdebug已加载一样-必须先卸载它

PhpStorm可以卸载已配置PHP版本的扩展。它所做的就是根据您的选择添加扩展和配置设置

在与命令行(CLI)类似的PhpStorm中,您可以控制PHP可执行文件的环境参数和命令行参数

如果系统上php可执行文件的现有配置负载已经过大,作为最后手段,您可以首先使用
-n
开关禁用所有扩展,然后根据需要添加扩展

  • -d扩展名=
    []
某些扩展(如xdebug)需要作为zend扩展加载:

  • -d zend_扩展=
    []
有关PHP命令行选项的说明,请参阅

有关各种配置选项的说明,请参见:

  • php发行版附带的已注释的
    php.ini
    文件
  • PHP手册中的相应页面(它还有一个)
  • 扩展作者提供的附加文档,例如,通常有详细的配置说明,并涵盖所有ini设置

关于XDEBUG_模式的警告表明XDEBUG的phpunit代码覆盖率驱动程序正在加载。可能是这样:-确保未加载xdebug扩展。警告还表明它已加载(),我知道我启用了XDebug,但我认为禁用XDebug的代码覆盖就足够了。。。我将尝试不使用它,但是,XDebug对于代码覆盖率也很有用,如果我们想使用XDebug的其他特性呢?我们每次都必须切换吗?当我禁用XDebug时,它会显示“没有支持路径覆盖的代码覆盖驱动程序”,并且
php-m | grep“pcov”
按预期显示
pcov
。那么…我错过了什么?我可以想象这是令人困惑的,但也很难说仅仅从评论。请找到一种方法,您可以在命令行上增加PHP配置,从没有配置到运行phpunit,并选择代码覆盖率(包括pcov示例)此处:-这可能会为您提供您所需的见解,并有助于解决此处的问题。我不知道新警告中“路径覆盖支持”的具体含义。不知道pcov是否支持它。也许这是phpunitxml配置文件中的一些配置?我已经看到sebastianbergmann的项目
phpcov
有关于路径覆盖的参数。那不是同一个司机吗?如果这真的不一样……我们怎么能同时拥有速度和路径覆盖率呢?我只是在没有'pathCoverage=“true”`的情况下进行了测试,但报告仍然没有生成。@lionelp:首先减少功能集。禁用
路径覆盖
,例如删除该属性。然后冲洗并重复。
<coverage pathCoverage="true">
  <report>
    <clover outputFile="./coverage.xml"/>
  </report>
</coverage>
$ XDEBUG_MODE=coverage !! # press enter