2012-02-09 9 views
1

状況

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()のようなものが同じ結果をもたらすだろうと思ったが、期待したものではない(私は例外をあまり使わなかった)

答えて

0

ファイルと行番号の組み合わせのリストはstack traceと呼ばれています。 Exception::getTrace()を使用して配列として取得し、それを自分で歩くこともできますし、PHPUnit_Util_Filter::getFilteredStacktrace()を呼び出すことでPHPUnitでクラスをフィルタリングすることもできます。 $etrueの例外を渡して、フォーマットされた文字列を受け取るか、またはfalseを渡して、フィルタリングされた配列を元に戻します。

+0

驚くばかりです、それはまさに私が望んでいたものです。ありがとう! – NkM

関連する問題