【问题标题】:code coverage report not correct after upgrading to PHPUnit 5.5.4升级到 PHPUnit 5.5.4 后代码覆盖率报告不正确
【发布时间】:2017-01-28 04:52:00
【问题描述】:

我将 PHP 5.6.24 与 PHPUnit 5.5.4 和 XDebug 2.4.1 一起使用,代码覆盖率达到 0.83%。 但是,在我使用 PHP 5.6.0 和 PHPUnit 4.7.7 和 XDebug 2.3.3 之前,代码覆盖率达到了 84% 以上。

我发现,从 PHP 5.5.x 开始,您需要有一个配置了白名单的 phpunit.xml。这对我来说是新的,所以我添加了以下文件:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./</directory>
            <file></file>
        </whitelist>
    </filter>
    <logging>
        <log type="coverage-html" target="../results/report" lowUpperBound="35" highLowerBound="70"/>
    </logging>
    <testsuites>
        <testsuite name="DTS">
            <directory>./</directory>
        </testsuite>
    </testsuites>
</phpunit>

单元测试仍然有效。当我通过命令行运行它们时,我仍然看到所有测试都已成功执行,但只是代码覆盖率报告的结果如此奇怪。

【问题讨论】:

    标签: php phpunit code-coverage


    【解决方案1】:

    我正在运行 5.5.4,这是最新的稳定版本,5.6 是测试版。我将日志添加到我的日志中以查看它是否有效,并且确实有效。它生成了一个 HTML 报告,该报告位于报告目录中,正确显示了我的百分比。这是我的 phpunit.xml 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <phpunit colors="true" bootstrap="vendor/autoload.php">
        <testsuite name="Full Suite">
            <directory>tests/</directory>
        </testsuite>
        <filter>
            <whitelist processUncoveredFilesFromWhitelist="true">
                <directory suffix=".php">src</directory>
            </whitelist>
        </filter>
        <logging>
            <log type="coverage-html" target="report"/>
        </logging>
    </phpunit>
    

    所以它可能是 beta 版本,但您至少可以看到我的 xml 文件并知道它适用于 5.5.4。祝你好运!

    【讨论】:

    • 感谢您的意见。我使用您的文件作为基础(修改了我的路径),但我仍然得到相同的结果。 (我也在用最新稳定的PHPUnit 5.5.4,没试过beta版)
    • 那太糟糕了,希望它有点小...(对不起,我误读了您的原始帖子并看到 PHP 5.6 并认为它是 PHPUnit 5.6,因此测试版混乱)...我正在运行 PHP 5.6也一样。我只能建议设置一些简单的测试用例,看看它是否运行,然后只是为了检查你的环境。祝你好运!
    • phpunit 对文件夹/测试结构有什么特殊要求吗?我对此表示怀疑,因为它会找到并执行所有测试用例?看到的是我所有的 3793 测试都成功执行了,但是只有 13 / 822 测试方法有代码覆盖。
    • 是的,如果它通过自我发现来寻找测试(要求它测试整个目录),它正在寻找像这样命名的文件:*T​​est.php。我刚刚注意到,您的测试目录与白名单相同,也许是这样?换句话说,最好将测试代码放在单独的目录结构(例如 src)中,并且在另一个目录中的测试用例说“tests”,然后将 src 列入白名单,仅表明目标代码的多少测试已涵盖。您可以在我的项目(和 phpunit.xml)中看到我的意思:github.com/1HappyPlace/clio
    • 嗯,你的建议成功了。因此,我将所有源代码移动到“src”子文件夹中,并将测试代码移动到“tests”子文件夹中。现在我得到了适当的代码覆盖率。至少对于我尝试过的代码的一个非常小的子集。我有一些重构工作要做​​(更改包含路径等以匹配新的目录结构)谢谢凯蒂!
    猜你喜欢
    • 2014-03-21
    • 2014-04-16
    • 2012-08-23
    • 2019-04-24
    • 2018-05-29
    • 2014-09-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多