Я пытался решить эту проблему в течение некоторого времени.
У меня есть простой тестовый пример 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>
во<?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>
во<?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 .
Хорошо, поэтому, если у кого-то есть проблемы с получением или неполным выходом из командной строки PHPUnit, дважды проверьте свои директивы конфигурации php.ini
:
error_reporting
– должен быть установлен на E_ALL | E_STRICT
E_ALL | E_STRICT
для вашей среды разработки display_errors
– должно быть установлено значение On
У меня была та же проблема, даже при включенной отчетности об ошибках.
Я попытался включить в свои тестовые и setUp
методы setUp
чтобы узнать, где он висит, но они так и не появились. Проблема оказалась выходной буферизацией PHP. Когда я добавил следующий метод в свой тест:
protected function debug($text) { echo "\nDEBUG: $text\n"; flush(); ob_flush(); }
и использовал $this->debug()
вместо простого echo
, я смог увидеть мои отладочные утверждения. Двоичный поиск по коду быстро привел к источнику проблемы (в моем случае недействительный инструмент базы данных).