Покрытие кода PHPUnit сообщает о ложно-положительном внутри foreach

Покрытие кода 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-code 6.0.7 с использованием PHP 7.2.10-0ubuntu0.18.04.1 с Xdebug 2.6.0 и PHPUnit 7.3.2

Я попробовал несколько старых версий phpunit и получил те же результаты.

Это ошибка или я что-то здесь упускаю?

3

Решение

Это вызвано в настоящее время нерешенной ошибкой в ​​PHP, как описано Вот а также Вот.

Проблему можно избежать с помощью стандартного for loop вместо foreach loop, Или, перемещая тело foreach в другую функцию, как описано в вопросе.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]