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

2016年3月13日

PHPUnitは本来Warningもエラーとしてキャッチしてくれるのですが、フレームワークなどがset_error_handlerを設定しているとその機能を殺してしまいます。
せっかくある機能が使えないのは勿体無いので強引に動くようにしましょう

~~~
public function setUp() {
set_error_handler(function($errno, $errstr, $errfile, $errline) {
throw new RuntimeException($errstr . ” on line ” . $errline . ” in file ” . $errfile);
});
}

public function tearDown() {
restore_error_handler();
}
~~~

参考:Lucas : Catch PHP warnings and notices when unit testing

setUpとtearDownを使ってset_error_handlerをPHPUnit側で設定します
すると結果はこんな感じ

~~~
1) SC_CheckError_FILE_NAME_CHECK_BY_NOUPLOADTest::testFILE_NAME_CHECK_BY_NOUPLOAD_空文字列の場合_エラーをセットしない
RuntimeException: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 3 on line 854 in file /path/to/eccube/data/class/SC_CheckError.php

/path/to/eccube/tests/class/SC_CheckError/SC_CheckError_FILE_NAME_CHECK_BY_NOUPLOADTest.php:32
/path/to/eccube/data/class/SC_CheckError.php:854
/path/to/eccube/data/class/SC_CheckError.php:48
/path/to/eccube/tests/class/SC_CheckError/SC_CheckError_FILE_NAME_CHECK_BY_NOUPLOADTest.php:68
~~~

WarningをRuntimeExceptionとしてキャッチ出来ました(´∀`*)