Покрытие кода PHPUnit сообщает о ложно-положительном внутри foreach - PullRequest
0 голосов
/ 22 ноября 2018

Покрытие кода 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 и получил те же результаты.

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

1 Ответ

0 голосов
/ 26 ноября 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...