【问题标题】:PHPUnit code coverage reports false positive inside foreachPHPUnit 代码覆盖率在 foreach 中报告误报
【发布时间】:2019-04-24 22:38:55
【问题描述】:

PHPUnit 代码覆盖率报告了以下函数的 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.2 测试 php-code-coverage 6.0.7

我尝试了几个旧版本的 phpunit,得到了相同的结果。

这是一个错误还是我在这里遗漏了什么?

【问题讨论】:

    标签: php phpunit php-code-coverage


    【解决方案1】:

    这是由herehere 中描述的 PHP 中当前未解决的错误引起的。

    使用标准for loop 代替foreach loop 可以避免该问题。或者,通过将 foreach 主体移动到问题中描述的另一个函数中。

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 2014-04-16
      • 2012-08-23
      • 2014-09-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      相关资源
      最近更新 更多