Phpunit覆盖:'addUncoveredFilesFromWhitelist'和'processUncoveredFilesFromWhitelist'选项之间有什么区别?

时间:2015-03-13 20:20:48

标签: php phpunit

我正在尝试为特定目录设置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>

目前前两个选项可用(具有不同的覆盖数)但第三个选项将失败,错误类似于How to add uncovered files to PHPUnit code coverage report of the Yii application

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

2 个答案:

答案 0 :(得分:32)

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

  • 如果addUncoveredFilesFromWhitelistFALSE,则代码范围包含有关已加载和执行的文件的信息(仅包含包含代码的行);
    在这种情况下,processUncoveredFilesFromWhitelist的值将被忽略;
  • 如果addUncoveredFilesFromWhitelistTRUE,则白名单中未加载和执行的文件也将包含在代码覆盖率中:
    • 如果processUncoveredFilesFromWhitelistFALSE,则不会以任何方式处理文件;所有行都将出现在代码覆盖中,因为没有被执行,即使是空行和仅包含注释的行;这是完成任务的快捷方式;
    • 如果processUncoveredFilesFromWhitelistTRUE,则会包含文件,并使用XDebug的代码覆盖功能(与实际运行的文件相同)仅将这些行放入报告中包含代码;这是一种缓慢勤奋的方式。

addUncoveredFilesFromWhitelist的默认值为TRUEprocessUncoveredFilesFromWhitelist的默认值为FALSE。这意味着白名单中未涵盖的文件(因为它们没有运行)使用快速方式及其覆盖率报告包含在报告中,而精确(0%)则使用总计计算行数略大于实际行数。

但是,由于任何内容的0仍为0%,因此它认为这是在报告中包含未覆盖文件的最佳方式。

答案 1 :(得分:6)

所以我觉得我错了。以下是documentation对此所说的内容:

  

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

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

<强>原始

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

Twitter对话的内容是:

  

@ user1:在@phpunit中,addUncoveredFilesFromWhitelist =“true”和processUncoveredFilesFromWhitelist =“true”之间有什么区别?

     

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