好的,继承人的情景。
我们有两个独立的Zend项目,它们共享一些共同的代码。公共代码包含在每个项目中扩展的抽象类和控制器。
目前,公共代码被sym链接到每个项目中。
我们在每个项目中都有单元测试,涵盖了公共代码中的一些抽象类。
我已经配置了phpunit,以便它包含来自磁盘上正常位置的公共代码(而不是sym链接位置)。
我使用--coverage-php生成覆盖文件,然后使用phpcov合并它们。
报告显示了项目和公共代码,但是,在许多常见类中,每种方法的开头大括号都显示为没有覆盖的可执行代码。因此,我们的报告低于应有的水平。
我附上了HTML报告的示例图片。
我做错了吗?
编辑:经过多一点挖掘,即使没有合并报告,公共代码也会将方法的开头大括号显示为可执行代码而没有覆盖。另一个编辑:我想我找到了原因(但不是解决方案)。 在包含在测试套件中但未在单元测试中涵盖的类中,所有方法行(包括开括号)都标记为已执行但未涵盖。
因此,在我的覆盖率报告中,公共单元测试报告在图像中的文件的第35行有一个数组条目,但其他项目没有此条目。合并后,其他行被标记为已覆盖,但这一行不是。所以问题在于未覆盖的文件,将开放的大括号显示为未覆盖的行,而不是死代码。
答案 0 :(得分:0)
我遇到了同样的问题,正如您所描述的,使用addUncoveredFilesFromWhitelist
合并两份报告。我还遇到了一些问题,例如在一个测试套件覆盖的文件中打开括号,但未在另一个测试套件中覆盖的文件显示为未覆盖的可执行行。
要使合并报告正确显示,需要正确设置processUncoveredFilesFromWhitelist
和addUncoveredFilesFromWhitelist
选项(https://stackoverflow.com/a/29042391/2220615包含很好的解释)。
TRUE
的默认设置为processUncoveredFilesFromWhitelist
,因此白名单中的所有文件都会添加到报告中,但FALSE
默认为processUncoveredFilesFromWhitelist
,因此s中的每一行在特定套件中未涵盖的文件被标记为可执行且未被覆盖。
要解决此问题,我将TRUE
设置为if(empty($result)){
echo 'email not in database';
}
以获取两个覆盖率报告,然后合并后的报告正确显示这些行为死代码而不是未覆盖。