【发布时间】:2016-01-22 00:43:05
【问题描述】:
我不确定这是否是一个错误,但我似乎无法通过在 PHP 5.5 生成器中提前退出来获得 100% 的覆盖率。
例如:
<?php
function gen($branch = false)
{
yield;
if($branch) {
echo 'branched';
return;
} // This line is never covered.
echo 'did not branch';
}
if 语句的右括号永远不会被覆盖。它不被视为“死代码”,它的行为就像您没有考虑退出 if 语句的可能性一样。
我不想使用else,因为正如 phpmd 所说,“永远不需要其他”,但我希望获得 100% 的覆盖率(因为这样可以很容易地查看我是否错过了新代码中的某些内容,无需深入研究)。
还有其他人遇到过这种情况吗?有解决办法吗?
【问题讨论】:
-
右括号总是被认为是死代码。我相信这是 PHP_CodeCoverage 和 XDebug 结合使用的错误。 This guy 似乎在降级 PHP_CodeCoverage 方面取得了成功。
-
另外,请注意,请记住
100 % code coverage !== fully tested code,因此覆盖率不应是测试成功的唯一标准。 -
在这种情况下,代码被认为是“未被发现的”而不是“死的”。目前使用
phpunit/php-code-coverage @ 2.2.4,它似乎是特定于生成器的,所以我认为这不是同一个问题。我向php-code-coverage 和Xdebug 报告了这个问题。希望他们能够解决这个问题。 :) -
fixecd,我认为关闭bugs.xdebug.org/view.php?id=1192#c3196 是安全的:-P
标签: php phpunit generator code-coverage xdebug