我正在尝试为特定目录的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
的默认值为 TRUE
,processUncoveredFilesFromWhitelist
的默认值为 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