2011-09-15 12 views
3

PHPUnitを使用して、単体テストとHTTP経由でいくつかのURLを照会し、いくつかのXPathに対して出力をチェックする機能テストの両方を実行しています。文字列のPHPエラー/警告を検出するライブラリ

時には、PHPエラーがページのHTML出力に表示されることがあります(display_errorsは、devシステムなので、オンになっています).HTMLページのエラーで詳細なphpunitエラーメッセージを表示したいと思います。

エラーの処理は問題ありません。これを行う方法はわかっています。問題は、xdebugを有効にすると、HTML出力からスタックトレースを取得してエラーメッセージを抽出することです。

既に使用できるライブラリはありますか?


質問

あなたの代わりにページを取得何か、そのページ自体のテストを書いた場合、それはおそらく良いでしょうか?

残念ながら、すべてのレガシーコードが簡単にテストできるわけではありません。だから、いくつかのHTTPクエリを実行し、HTMLをチェックすることは時々唯一の(または最も簡単な)オプションです。

単体テスト時に発生するすべてのエラーを記録するカスタムエラーハンドラを設定するのは簡単ではありませんか?

テストは、私のユニットテストから直接アクセスできないリモートサーバー上で実行されます。

もちろん、私はそれらをいくつかのパブリックアクセス可能なファイルに記録し、httpでもそれらをフェッチしますが、次に、どのテストがエラーに属するか把握する必要があります。 。

+0

ユニットテスト中に発生するすべてのエラーを記録するカスタムエラーハンドラを設定する方が簡単ですか? – Sjoerd

+0

あなたの質問への回答ではありませんが、ページを取得するものではなく、そのページ自体のテストを書いた方が良いでしょう(何か特別なことが止まっていない場合)。 – Nanne

答えて

1

私はそのようなライブラリを知らないのですが、preg_matchの貧弱な人の解決策は私にとってはうまく機能します。 Like

if (preg_match('~\n(Notice|Warning|Fatal error): (.+?) in (\S+) on line (\d+)~')...... 
+0

はい、それは可能ですが、十分には行きません。私は彼らがそこにいるときにxdebug stacktracesを手に入れたいと思います。それを行うための手作りは私がしたいことではありません。そのような場合はlibが良いでしょう。 – cweiske

1

私は、テスト実行の時間とエラーメッセージの時間をログファイルから相関させます。代わりにdisplay_errors = Onの代わりに、またはそれに加えて、私はエラーもログに記録します。これは、サーバー・サーバー上で単体テストを実行していることを前提としています。

そうでない場合は、syslog-ngを使用してログファイルにアクセスする必要があります。これらのすべてがクラウドベースのものなら、私はそれをlogglyにプッシュし、APIを使って検索します。とにかく!

私はターンキーソリューションは認識していませんが、それは一言で言えばわかります。

基本的な考え方は、test listenerを書くことになります:

class CweiskeListener extends PHPUnit_Framework_TestListener 
{ 
    public function endTest(PHPUnit_Framework_Test $test, $time) 
    { 
     // Feb 25 20:36:06 
     $syslogDateStr = date('M d h:i'); 
     // run something like: 
     $logOut = system("cat /var/log/syslog|grep {$syslogDateStr}"); 
     // fail the test here? 
    } 
} 

HTH - 私は、コードを試していないが、それはあなたが始める必要があります。

関連する問題