WarningによるPHPUnitのエラーを抑制してテストケースを実行したい


目的

PHPUnitにてWarningが例外化されテストケースがエラーとして処理されてしまった。
テストケース内で想定していた業務エラーとして扱えないのでWarningを抑制したい。1

状況

PHPUnit実行でテストケース結果でエラーが返ってきた。2
今回はopenssl_x509系関数のWarningが原因となっている模様。

openssl_x509_read(): supplied parameter cannot be coerced into an X509 certificate!

(対応パターン1) PHPUnitの設定で抑制する

対象のテストケースで以下の様にする。

public function testXXX(){
    $orig = PHPUnit_Framework_Error_Warning::$enabled;
    PHPUnit_Framework_Error_Warning::$enabled = false;

    //(Warningが発生するテスト)

    PHPUnit_Framework_Error_Warning::$enabled = $orig;
}

全体に影響してもいいならsetUp()、tearDown()内でも実施可能。

参考 stackoverflow.com

エラーが抑制され想定通りテストケースが通る様になるが以下のメッセージ出力は残る。

Warning: openssl_x509_read(): supplied parameter cannot be coerced into an X509 certificate!

(対応パターン2) Warningの例外化をキャッチし抑制する3

対象のテストケースで以下の様にする。

public function testXXX(){
    set_error_handler(function($errno, $errstr, $errfile, $errline) {});

    //(Warningが発生するテスト)

    restore_error_handler();
}

エラーが抑制された状態となりWarningメッセージ出力も無くなった。

参考

PHPUnitでwarningもエラーとして扱う


  1. アンチパターン的な要素が大きいので、副作用等を想定しつつ状況に応じて対応を すべき。  

  2. 環境はPHP5系 

  3. いわゆる握り潰し的な感じ