2017-07-03 12 views
0

タイトルには、PHPUnitのテスト中にerror_log()メッセージが端末に出力されないようにする方法があります。上記の例でテスト中に端末にerror_log()メッセージを出力しないようにする

enter image description here

、被試験方法は、試験の間に、そのメッセージを印刷し、(「ドン\」t 'は表示)のerror_logを通過します。

テストログを残しておくために、この動作を防ぐ方法はありますか?また、メッセージをキャッチしてその出力をテストする方法はありますか? (メッセージが単純な文字列でない場合)。

答えて

1

私のテストログを保つために、この動作を防止する方法はありますか?また、メッセージをキャッチしてその出力をテストする方法はありますか? (メッセージが単純な文字列でない場合)。

最初に表示されているのはテストログではありません。 と表示されたエラーメッセージは、実際には標準出力ストリームであり、標準出力ストリームではありません。あなたが見ているところでは、ターミナルが両方のファイルが混在しているのを見せても、それほど大きな違いはありません。ファイルに記録するとそのエラーメッセージは記録されません。

これはb/c error_log()エラーメッセージを設定されたログファイル(PHPのerror_log ini指令)に書き込みます。 PhpunitはCLIバージョンのPHP(コマンドライン上)で動作するので、これは既定では前述の標準エラーストリームです。

これには、標準エラーストリームに出力しないでキャプチャするために必要なすべての情報も含まれています。一旦試験用:

$capture = tmpfile(); 
$saved = ini_set('error_log', stream_get_meta_data($capture)['uri']); 
error_log("Test for this message"); 
ini_set('error_log', $saved); 
var_dump(stream_get_contents($capture)); 

これはerror_log()を介して、一時ファイルを介してコンテンツ出力を提供する:テストケースが終了すると、一時ファイルが自動的に削除され

string(59) "[06-Jul-2017 12:14:45 Europe/Amsterdam] Test for this message 
" 

0

set_error_handler()を使用して独自のエラーハンドラを定義できます。コメント#112881には、コールバックを使用した例があり、ニーズに合わせて調整することができます。ファイルにログを記録し、無視するかどうかを指定します。

これをあなたのphpunitブートストラップファイルに入れることができます。それはそのトリックを行うべきです。

関連する問題