Покрытие кода 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 и получил те же результаты.
Это ошибка или я что-то здесь упускаю?
Это вызвано в настоящее время нерешенной ошибкой в PHP, как описано Вот а также Вот.
Проблему можно избежать с помощью стандартного for loop
вместо foreach loop
, Или, перемещая тело foreach в другую функцию, как описано в вопросе.
Других решений пока нет …