PHPUnit合并了覆盖率报告未显示方法左括号

时间:2014-05-28 14:31:05

标签: php phpunit

好的,继承人的情景。

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

目前,公共代码被sym链接到每个项目中。

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

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

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

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

我附上了HTML报告的示例图片。

enter image description here

我做错了吗?

编辑:经过多一点挖掘,即使没有合并报告,公共代码也会将方法的开头大括号显示为可执行代码而没有覆盖。

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

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

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,正如您所描述的,使用addUncoveredFilesFromWhitelist合并两份报告。我还遇到了一些问题,例如在一个测试套件覆盖的文件中打开括号,但未在另一个测试套件中覆盖的文件显示为未覆盖的可执行行。

要使合并报告正确显示,需要正确设置processUncoveredFilesFromWhitelistaddUncoveredFilesFromWhitelist选项(https://stackoverflow.com/a/29042391/2220615包含很好的解释)。

TRUE的默认设置为processUncoveredFilesFromWhitelist,因此白名单中的所有文件都会添加到报告中,但FALSE默认为processUncoveredFilesFromWhitelist,因此s中的每一行在特定套件中未涵盖的文件被标记为可执行且未被覆盖。

要解决此问题,我将TRUE设置为if(empty($result)){ echo 'email not in database'; } 以获取两个覆盖率报告,然后合并后的报告正确显示这些行为死代码而不是未覆盖。