【问题标题】:Phpunit coverage: what is the difference between 'addUncoveredFilesFromWhitelist' and 'processUncoveredFilesFromWhitelist' options?Phpunit 覆盖范围:“addUncoveredFilesFromWhitelist”和“processUncoveredFilesFromWhitelist”选项有什么区别?
【发布时间】:2015-05-16 11:13:23
【问题描述】:

我正在尝试为特定目录的 phpunit 设置代码覆盖率。谁能告诉我有什么区别:

<filter>
    <whitelist>
        <directory suffix=".php">lib/</directory>
    </whitelist>
</filter>

<filter>
    <whitelist addUncoveredFilesFromWhitelist="true">
        <directory suffix=".php">lib/</directory>
    </whitelist>
</filter>

<filter>
    <whitelist processUncoveredFilesFromWhitelist="true">
        <directory suffix=".php">lib/</directory>
    </whitelist>
</filter>

目前前 2 个选项可以工作(使用不同的覆盖数字),但第 3 个选项将失败,并出现类似于 How to add uncovered files to PHPUnit code coverage report of the Yii application 的错误。

刚开始使用 phpunit,想了解这些白名单选项之间的区别。我阅读了有关此的官方文档,但我不确定我是否理解。

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

    在 GitHub 上快速浏览php-code-coverage 包的源代码揭示了真相:

    • 如果addUncoveredFilesFromWhitelistFALSE,则代码覆盖率包含有关已加载和执行的文件的信息(仅包含包含代码的行);
      在这种情况下,processUncoveredFilesFromWhitelist 的值将被忽略;
    • 如果addUncoveredFilesFromWhitelistTRUE,则白名单中未加载和执行的文件也将包含在代码覆盖范围内:
      • 如果processUncoveredFilesFromWhitelistFALSE,则不会以任何方式处理文件;它们的所有行都将出现在代码覆盖范围内,即使是空行和仅包含 cmets 的行也是如此;这是完成工作的快速而肮脏的方式;
      • 如果processUncoveredFilesFromWhitelistTRUE 则包含文件并使用XDebug 的代码覆盖功能(与实际运行的文件相同)仅将包含代码的行放入报告中;这是缓慢而努力的方式。

    addUncoveredFilesFromWhitelist 的默认值为TRUEprocessUncoveredFilesFromWhitelist 的默认值为FALSE。这意味着白名单中未被覆盖的文件(因为它们没有运行)使用快速方式包含在报告中,并且它们的覆盖率报告虽然准确(0%)是使用总行数计算的比真实的大。

    但是,由于 0 out of anything 仍然是 0%,它认为这是将未发现文件包含在报告中的最佳方式。

    【讨论】:

    • 0 行 300 条未覆盖的行将导致 0%,但 0/300 会影响总行数,可能只有 100 条实际语句。因此,虽然提供了更快的收集覆盖率统计数据的方法,但它增加了实际覆盖率统计数据的误差。
    • @EduardSukharev 不要以高代码覆盖率为目标,而是要验证代码行为是否符合规范。很容易达到100% 代码覆盖率,但这是否意味着代码已经完全测试?
    • 对我来说,在 PHPStorm 2017.3 中使用 processUncoveredFilesFromWhitelist="true" 运行 PHPUnit 6.5.6 的速度大约是 processUncoveredFilesFromWhitelist="false" 的两倍。
    【解决方案2】:

    所以我认为我错了。以下是documentation 对此的评价:

    可选地,可以通过在 PHPUnit 配置中设置 addUncoveredFilesFromWhitelist="true" 将所有列入白名单的文件添加到代码覆盖率报告中(请参阅“包含和排除文件以进行代码覆盖率”部分)。这允许包含尚未测试的文件。例如,如果您想获取有关此类未覆盖文件的哪些行可执行的信息,您还需要在 PHPUnit 配置中设置 processUncoveredFilesFromWhitelist="true"(请参阅“包含和排除文件以进行代码覆盖”部分)。

    所以这里的答案是adding 未发现的文件会将它们包含在覆盖率报告中,但实际上processing 它们会收集更多信息。

    原创

    见塞巴斯蒂安的this twitter conversation。从 twitter 的简洁性中很难判断,但看起来 addUncoveredFilesFromWhitelist 可能只是 processUncoveredFilesFromWhitelist 为遗留代码提供的相同功能的旧形式。

    推特对话的内容是:

    @user1:@phpunit 中 addUncoveredFilesFromWhitelist="true" 和 processUncoveredFilesFromWhitelist="true" 有什么区别?

    @s_bergmann:你想使用 processUncoveredFilesFromWhitelist。如果它不起作用(遗留代码),则使用 addUncoveredFilesFromWhitelist

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 2014-12-22
      • 2013-08-19
      • 2012-12-11
      • 2015-09-22
      相关资源
      最近更新 更多