PHPUnit代码覆盖率报告将某些文件报告为没有代码(因此报告0/0行100%覆盖率)

5

我已经寻找解决方案一段时间了,但是找不到任何解决方法。

我在我的PHP应用程序上进行了一些代码覆盖测试,除了几个文件之外,它都很好用。PHPUnit似乎认为这些文件为空(即没有任何代码行),而实际上它们并不为空(每个文件都包含数百行代码)。

我可以看到类和它的方法,但是每个函数被认为是0行(报告显示0/0,100%的覆盖率)。如果我尝试单击函数或类名称,通常会看到代码,但这些有问题的类则不行。

我想发布一张图像,但由于我是新用户,所以不幸的是我不能发布图片。

有人遇到相同的问题吗?

编辑:以下是一个具有该问题的示例类:

1 http://img43.imageshack.us/img43/9127/screenshot1aig.png

在找到解决方案后的编辑(2):我删除了源代码,因为它不是问题的原因。


1
也许发送两个示例文件,一个您认为“涵盖”另一个的文件? - Gavriel
我不确定我遇到了同样的问题,但有时候这种情况确实会发生。稍微改变一下格式可能会改变事情的发展。如果你想知道更多信息,应该添加相关文件,以便了解是否只有你遇到了这个问题。 - hakre
如果有人点赞了你的问题并且给了一个+1,那么你应该能够添加截图。 - Basic
@Basic,不幸的是,这些是我拥有的一些较小的文件。您认为格式是否会对代码覆盖率产生影响? - Icefire
1
请压缩您的文件,直到您无法再压缩它们为止,而不会导致phpunit行为不同。这样更容易找出实际发生的情况,并且您不会超出帖子的限制。 - cweiske
显示剩余4条评论
2个回答

0

我找到了一个解决方法。我按照cweiske的建议(我早该这么做了)缩小了范围,直到phpunit代码覆盖率可以工作。但是惊奇的是,即使我只留下了一个单一的方法,它也从未起作用。

我创建了另一个文件“Foo.php”,包含与PlayersManager相同的内容(几乎为空,只有一个函数)。

一个Foo.php被完美地覆盖了!我将我从PlayersManager中拥有的整个文件复制到Foo.php中,运行代码覆盖率,它完美地工作了。

为了证明我不是疯了,我重新复制了PlayersManager中的代码并重试:PlayersManager的覆盖率仍然是100%,没有任何代码。

我删除了PlayersManager.php并将Foo.php重命名为PlayersManager.php,重新运行覆盖率,它就可以工作了!

phpunit是否保留了某些缓存之类的东西!?

无论如何,这个解决方法将适用于将来的其他问题文件,但我只是在想!

感谢您的帮助!


0

记录一下,如果有人查看这个帖子。我使用的phpunit版本是9.6.7,遇到了完全相同的问题。

项目中的其他文件都显示正常,只有一个文件有一个非常长的行,其中包含了一系列的id。经过一些尝试和错误,找到了一个解决办法:将这一行拆分成多行。

我的那一行是一个包含500个元素的数组赋值,使用正则表达式替换所有的","为",\n"。

对于这个问题的复活表示抱歉。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接