Положение
Я реализую Listener для PHPUnit, который будет записывать результаты теста в БД для последующего просмотра. Мне нравится информация по умолчанию phpunit
, выводимая на консоль, когда происходит сбой, ошибка, пропущенный или неполный тест.
Пример:
1) sandbox_ExtensionSampleTest::testError
printf(): Too few arguments
E:\ecom_testing\tests_v2\TestSuites\sandbox\Base.php:28
E:\ecom_testing\tests_v2\TestSuites\sandbox\ExtensionSampleTest.php:37
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestCase.php:939
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestCase.php:801
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestResult.php:649
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestCase.php:748
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestSuite.php:772
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestSuite.php:745
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\TextUI\TestRunner.php:325
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\TextUI\Command.php:187
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\TextUI\Command.php:125
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\phpunit:44
FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
Примечание. Я обнаружил, что список всех зависимостей PHPUnit в выводе равен ошибка , но в приведенном выше примере все еще показаны два связанных тестовых файла.
Вопрос
Одним из параметров для реализованного метода слушателя является Exception $e
. Я могу получить сообщение, а также первую строку, используя $e
, но я не могу получить остальные строки.
После прочтения Исключений в руководстве по PHP я подумал, что $e->getPrevious()
сработает ... попытался сделать следующее:
// Storing in a array to put into a DB later
// First line with the message
$trace[] = sprintf(
"%s\n\n%s:%s\n",
$e->getMessage(),
$e->getFile(),
$e->getLine()
);
// Go through the rest of the exceptions of files and lines
while ($e = $e->getPrevious()){
$trace[] = sprintf(
"%s:%s\n",
$e->getFile(),
$e->getLine()
);
}
Это не сработало. Кажется, что $e->getPrevious()
пусто, и я подтвердил это, когда бросил объект. Я думал, что что-то вроде $e->getTraceAsString()
даст те же результаты, но это не то, что я ожидал (я не использовал исключения очень)