Проблема PHPUnit - нет сообщений об ошибках - PullRequest
13 голосов
/ 17 июня 2011

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

У меня есть простой тестовый пример 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 тоже не помогла)?

РЕДАКТИРОВАТЬ: Я выяснил, что привело к провалу теста. Было ошибочное имя метода (я полагаю, я слишком полагаюсь на помощь кода). Однако это не решает основной проблемы. PHPUnit не сообщает о любых предупреждениях, ошибках или исключениях .

Ответы [ 2 ]

15 голосов
/ 17 июня 2011

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

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

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

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

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

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

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