PHPUnit 代码覆盖率报告 foreach 内的误报
PHPUnit code coverage reports false positive inside foreach
PHP单元代码覆盖率报告了以下函数的 100% 覆盖率,这显然是错误的:
public function run(){
foreach ([1] as $value) {
if($value === 1 ){
echo "Is called\n"; // TRUE positive
}
else{
echo "Not called\n"; // TRUE negative
echo "Not called either\n"; // FALSE positive
}
}
}
最后一行 echo "Not called either"
不是 运行,但报告说是!
如果我将 foreach 循环的主体重构为另一个函数,报告将变得正确:
public function run(){
foreach ([1] as $value) {
$this->run2($value);
}
}
public function run2($value){
if($value === 1 ){
echo "Is called\n"; // TRUE positive
}
else{
echo "Not called\n"; // TRUE negative
echo "Not called either\n"; // TRUE negative
}
}
使用 PHP 7.2.10-0ubuntu0.18.04.1 与 Xdebug 2.6.0 和 PHPUnit 7.3.2php-code-coverage 6.0.7 进行测试
我尝试了几个旧版本的 phpunit 并得到了相同的结果。
这是错误还是我遗漏了什么?
PHP单元代码覆盖率报告了以下函数的 100% 覆盖率,这显然是错误的:
public function run(){
foreach ([1] as $value) {
if($value === 1 ){
echo "Is called\n"; // TRUE positive
}
else{
echo "Not called\n"; // TRUE negative
echo "Not called either\n"; // FALSE positive
}
}
}
最后一行 echo "Not called either"
不是 运行,但报告说是!
如果我将 foreach 循环的主体重构为另一个函数,报告将变得正确:
public function run(){
foreach ([1] as $value) {
$this->run2($value);
}
}
public function run2($value){
if($value === 1 ){
echo "Is called\n"; // TRUE positive
}
else{
echo "Not called\n"; // TRUE negative
echo "Not called either\n"; // TRUE negative
}
}
使用 PHP 7.2.10-0ubuntu0.18.04.1 与 Xdebug 2.6.0 和 PHPUnit 7.3.2php-code-coverage 6.0.7 进行测试
我尝试了几个旧版本的 phpunit 并得到了相同的结果。
这是错误还是我遗漏了什么?