我正在为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依赖项a bug,但上面的示例仍然显示了两个相关的测试文件。
实现的侦听器方法的一个参数是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()
之类的东西会产生相同的结果,但这不是我的预期(我没有多少例外)
答案 0 :(得分:0)
文件和行号组合列表称为stack trace。您可以使用Exception::getTrace()
将其作为数组获取并自行完成,或者您可以通过调用PHPUnit_Util_Filter::getFilteredStacktrace()
让PHPUnit为您过滤掉它的类。传递异常$e
和true
以接收格式化字符串,或者传递false
以取代过滤后的数组。