PHPUnit合并覆盖率报告未显示方法打开大括号作为覆盖

PHPUnit合并覆盖率报告未显示方法打开大括号作为覆盖,php,phpunit,Php,Phpunit,好的,下面是场景 我们有两个单独的Zend项目,它们共享一些公共代码。公共代码包含在每个项目中扩展的抽象类和控制器 目前,通用代码是sym链接到每个项目中的 我们在每个项目中都有单元测试,这些测试涵盖了公共代码中的一些抽象类 我已经配置了phpunit,以便它包含磁盘上正常位置(而不是sym链接位置)的公共代码 我使用--coverage php生成覆盖率文件,然后使用phpcov合并它们 报告显示了项目和公共代码,但是,在许多公共类中,每个方法的开头大括号都显示为可执行代码,没有覆盖范围。因此

好的,下面是场景

我们有两个单独的Zend项目,它们共享一些公共代码。公共代码包含在每个项目中扩展的抽象类和控制器

目前,通用代码是sym链接到每个项目中的

我们在每个项目中都有单元测试,这些测试涵盖了公共代码中的一些抽象类

我已经配置了phpunit,以便它包含磁盘上正常位置(而不是sym链接位置)的公共代码

我使用--coverage php生成覆盖率文件,然后使用phpcov合并它们

报告显示了项目和公共代码,但是,在许多公共类中,每个方法的开头大括号都显示为可执行代码,没有覆盖范围。因此,我们的报告低于应有的水平

我附上了一个HTML报告的示例图像

我做错什么了吗

编辑:进一步挖掘之后,即使没有合并报告,公共代码也会将方法的开头括号显示为可执行代码,没有覆盖范围

另一个编辑:我想我已经找到了原因(但不是解决方案)。 在测试套件中包含但未包含在单元测试中的类中,所有方法行(包括大括号)都标记为已执行但未包含


因此,在我的覆盖率报告中,公共单元测试报告在图像中的文件的第35行有一个数组条目,但其他项目没有这个条目。合并后,其他行被标记为已覆盖,但这一行没有。所以问题是,未覆盖的文件,将开头的大括号显示为未覆盖的行,而不是死代码。

我遇到了相同的问题,如您所述,使用
phpcov
合并两个报告。我还遇到了一个问题,在一个测试套件中包含了一些行,比如在文件中打开大括号,但在另一个测试套件中没有包含,这些行显示为未覆盖的可执行行

要使合并报告正确显示,需要正确设置
addUncoveredFilesFromWhitelist
processUncoveredFilesFromWhitelist
选项(包含良好的解释)

addUncoveredFilesFromWhitelist
的默认值为
TRUE
,因此白名单中的所有文件都将添加到报告中,但
processUncoveredFilesFromWhitelist
默认值为
FALSE
,因此,文件中未包含在特定套件中的每一行都标记为可执行且未覆盖


为了解决这个问题,我将两个覆盖率报告的
processUncoveredFilesFromWhitelist
设置为
TRUE
,然后合并的报告将行正确地显示为死代码,而不是未覆盖的代码。

我相信这与XDebug中的问题和语句解析有关。您需要将大括号单独放在一行上,而不是使用函数声明,以便XDebug正确地解析它。我相信,如果您继续查看引用的XDebug,您将发现XDebug、PHP和操作码的技术解析原因。