Подтвердить что ты не робот

Проблема PHPUnit - нет сообщений об ошибках

Я пытался решить эту проблему в течение довольно долгого времени.

У меня есть простой тестовый пример PHPUnit с двумя тестами. Когда я запускаю его, я получаю этот вывод:

PHPUnit 3.5.14 by Sebastian Bergmann.

.

Итак, первое утверждение выполняется, проходит. Второе утверждение, однако, вызывает некоторую ошибку PHP (исключение или что-то еще), а PHPUnit просто умирает без какой-либо информации о том, что могло пойти не так.

Вот мой phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>

<phpunit backupGlobals="false"
    backupStaticAttributes="false"
    colors="false"
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    processIsolation="false"
    stopOnFailure="true"
    syntaxCheck="false"
    bootstrap="bootstrap.php.cache"
>
    <testsuites>
        <testsuite name="Portal Test Suite">
            <directory>../src/OneSolution/Portal/*Bundle/Tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

Настройка syntaxCheck - true не дает дополнительной информации об ошибке. Тем не менее, он дважды печатает (перед запуском каких-либо тестов), что The filename, directory name, or volume label syntax is incorrect.

???

Итак, есть ли у кого-нибудь идеи, что я могу сделать, чтобы PHPUnit сообщал эти сообщения об ошибках (опция --verbose тоже не помогла)?

EDIT: Я выяснил, что привело к тому, что тест завершился неудачей. Было ошибочное имя метода (я полагаю, слишком много полагаюсь на кодовую помощь). Однако это не решает основной проблемы. Любые предупреждения, ошибки или исключение не сообщаются PHPUnit.

4b9b3361

Ответ 1

ОК, поэтому, если у кого-то возникли проблемы с получением или неполным выходом из командной строки PHPUnit, дважды проверьте свои директивы конфигурации php.ini:

  • error_reporting - должно быть установлено E_ALL | E_STRICT для вашей среды разработки.
  • display_errors - должно быть установлено On

Ответ 2

У меня была та же проблема, даже при включенной отчетности об ошибках.

Я попытался привести выражения echo в свои методы тестирования и setUp, чтобы узнать, где он висит, но они так и не появились. Проблема оказалась буферизацией вывода PHP. Когда я добавил в свой тест следующий метод:

protected function debug($text)
{
    echo "\nDEBUG: $text\n";
    flush();
    ob_flush();
}

и использовал $this->debug() вместо plain echo, я смог увидеть мои отладочные заявления. Двоичный поиск по коду быстро привел к источнику проблемы (в моем случае недействительный инструмент базы данных).