状況
PHPUnit用のリスナーを実装しています。これは、後で検討するためにテスト結果をDBに記録します。障害、エラー、スキップ、または不完全なテストが発生したときにデフォルトの情報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が、それでも上記の例では、2つの関連するテストファイルを示しています。
質問
実装リスナー・メソッドのパラメータの一つは、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()
のようなものが同じ結果をもたらすだろうと思ったが、期待したものではない(私は例外をあまり使わなかった)
驚くばかりです、それはまさに私が望んでいたものです。ありがとう! – NkM