我已经将我的项目 PHP 版本升级到 8 并将 PHPUnit 升级到 9.x,但是不再生成覆盖率报告?

Posted

技术标签:

【中文标题】我已经将我的项目 PHP 版本升级到 8 并将 PHPUnit 升级到 9.x,但是不再生成覆盖率报告?【英文标题】:I`ve upgraded my project PHP version to 8 and upgrage PHPUnit into 9.x but coverage reports are not generated anymore? 【发布时间】:2021-05-01 22:34:54 【问题描述】:

我尝试从 php 7 迁移到 PHP 8。我更新了所有依赖项,然后使用以下命令转换 PHPUnit 配置:

./vendor/bin/phpunit -c phpunit.xml --migrate-configuration

问题是不再生成覆盖率报告?!虽然所有测试都正常。

这是 phpunit.xml 文件的结果:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
    bootstrap="./vendor/autoload.php" 
    stopOnWarning="false" 
    verbose="false"
    backupGlobals="false" 
    backupStaticAttributes="false"
    beStrictAboutTestsThatDoNotTestAnything="true"
    beStrictAboutChangesToGlobalState="true"
    beStrictAboutOutputDuringTests="true" 
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true" 
    convertWarningsToExceptions="true"
    processIsolation="false" 
    stopOnFailure="false" 
    colors="true">
    <coverage includeUncoveredFiles="true">
        <include>
            <directory suffix=".php">./src</directory>
            <directory suffix=".php">./http-process</directory>
        </include>
        <report>
            <clover outputFile=".build/clover.xml" />
            <html outputDirectory=".build/coverage" />
        </report>
    </coverage>
    <php>
        <var name="DB_DSN" value="sqlite::memory:" />
        <var name="DB_USER" value="root" />
        <var name="DB_PASSWD" value="" />
        <var name="DB_DBNAME" value="pluf_test" />
        <var name="DB_SCHEMA" value="sqlite" />
    </php>
    <testsuites>
        <testsuite name="http process">
            <directory>./tests/Process/Http/</directory>
        </testsuite>
    </testsuites>
    <!-- Code coverage -->
    <logging />
</phpunit>

所有测试运行正常,但没有覆盖率报告!!。

【问题讨论】:

如何调用 PHPUnit?当您尝试生成代码覆盖率时,PHPUnit 的完整输出是什么? 【参考方案1】:

我用谷歌搜索找到了问题。最后,我找到了解决方案。就我而言,xdebug 配置是问题所在。 XDebug 有一个设置可以启用或禁用 xdebug 的功能。如您所知,覆盖范围是 XDebug 功能。所以我只是启用该功能如下:

xdebug.mode=debug,coverage

它还支持:

关闭:未启用任何内容。 develop:启用开发辅助工具,包括重载的 var_dump()。 coverage:启用代码覆盖率分析 debug:启用分步调试。 gcstats:启用垃圾收集统计 profile:启用分析 trace:启用函数跟踪功能

更多信息见Code Coverage:

【讨论】:

【参考方案2】:

也许最后一个&lt;logging /&gt; 元素会覆盖coverage/report

【讨论】:

以上是关于我已经将我的项目 PHP 版本升级到 8 并将 PHPUnit 升级到 9.x,但是不再生成覆盖率报告?的主要内容,如果未能解决你的问题,请参考以下文章

将 Laravel 5.4 升级到最新版本 (5.7)

php升级后.dll文件丢失

php升级后.dll文件丢失

如何将我的全局 vue-cli 安装升级到最新版本?

php composer如何知道php版本?

我正在将我的Java项目从Struts 2.3.15升级到2.3.34。我应该做些什么改变?