Phpunit coverage:“addUncoverFilesFromWhitelist”和“processUnco


Phpunit coverage: what is the difference between 'addUncoveredFilesFromWhitelist' and 'processUncoveredFilesFromWhitelist' options?

我正在尝试为特定目录的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 个选项可以工作(使用不同的覆盖率编号),但第三个选项将失败,并出现类似于如何将未覆盖的文件添加到 Yii 应用程序的 PHPUnit 代码覆盖率报告中的错误。

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

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

  • 如果FALSE addUncoveredFilesFromWhitelist则代码覆盖率包含有关已加载和执行的文件的信息(仅包含包含代码的行);
    在这种情况下,processUncoveredFilesFromWhitelist的值将被忽略;
  • 如果TRUE addUncoveredFilesFromWhitelist则白名单中未加载和执行的文件也将包含在代码覆盖率中:
    • 如果FALSE processUncoveredFilesFromWhitelist则不会以任何方式处理文件; 它们的所有行都将在代码覆盖率中显示为未执行,即使是空行和仅包含注释的行; 这是完成工作的快速而肮脏的方法;
    • 如果processUncoveredFilesFromWhitelist TRUE则包含文件,并使用 XDebu 的代码覆盖功能(与实际运行的文件相同)仅将包含代码的行放入报告中;这是缓慢的艰苦工作方式。

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

但是,由于0任何东西仍然是0%,它认为这是将未覆盖的文件包含在报告中的最佳方式。

所以我认为我错了。以下是文档对此的说明:

或者,通过在 PHPUnit 配置中设置 addUncoverFilesFromWhitelist="true",可以将所有列入白名单的文件添加到代码覆盖率报告中(请参阅名为"包括和排除代码覆盖率的文件"一节)。这允许包含尚未测试的文件。例如,如果要获取有关此类未覆盖文件的哪些行是可执行的信息,则还需要在PHPUnit配置中设置processUncoverFilesFromWhitelist="true"(请参阅名为"包括和排除代码覆盖率的文件"的部分)。

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

源语言

看看塞巴斯蒂安的推特对话。从Twitter的简洁性中很难分辨出来,但看起来addUncoveredFilesFromWhitelist可能只是processUncoveredFilesFromWhitelist为遗留代码提供的相同功能的旧形式。

推特对话的内容是:

@user1:在@phpunit中,addUncoverFilesFromWhitelist="true"和processUncoverFilesFromWhitelist="true"有什么区别?

@s_bergmann:您想使用 processUncoverFilesFromWhitelist。如果它不起作用(遗留代码),则使用 addUncoverFilesFromWhitelist