我正在使用PHPUnit生成代码覆盖率报告
vendor/bin/phpunit --coverage-clover coverage.clover
我有一些代码库在他们的测试中使用@covers
标记,表明他们测试的服务。在这些代码库中,没有专门的测试来处理诸如值对象之类的事情。这导致覆盖率报告指示许多代码未经测试,而实际上是。这使得通过查看覆盖率报告很难找到实际未测试的代码。解决此问题的一种方法是删除@covers
标记,但这些标记对于指示意图非常有用,并且在IDE识别它们时它们有助于导航。因此,我希望PHPUnit忽略这些标签。
我发现有一个--disable-coverage-ignore
标志,这使得PHPUnit忽略了coverage忽略标记。我所寻找的基本上是相反的。
有没有办法生成代码覆盖率报告,这些报告可以计算所有已执行的行,而无需通过这些整个代码库进行更改,例如删除所有@covers
标记?
答案 0 :(得分:1)
创建了一个PR来实现此目的,但幸运的是从未合并。
作为快速而肮脏的 hack ,您可以在PHPUnit的源代码中添加一行。
只需将return false;
作为applyCoversAnnotationFilter
文件中vendor/phpunit/php-code-coverage/src/CodeCoverage.php
方法的第一行,就像这样:
private function applyCoversAnnotationFilter(array &$data, $linesToBeCovered, array $linesToBeUsed, $ignoreForceCoversAnnotation)
{
return false;
在PHPUnit 6.5.14
中为我工作。
答案 1 :(得分:0)
根据PhpUnit的手册: “如果提供的话,这将有效地过滤代码覆盖率报告,使其仅包含来自引用的代码部分的已执行代码。这将确保仅在有专用测试的情况下,才将代码标记为覆盖,而不是由测试间接使用针对不同的类,从而避免代码覆盖率出现误报。”
因此,通过添加@coverage,您要求系统仅标记参考零件的内容。如果您想检查其他部分的覆盖范围,则可能要删除注释,或者也创建其他测试以覆盖这些部分,或者创建其他没有@covers的测试。
如果在phpunit.xml中将“ forceCoversAnnotation”设置为“ false”,则可以根据需要创建带@covers注释的teszt。
(我当前的版本是8.3.4)