正如標題所述,我期待在我的PHPUnit
測試期間找到一種方法來防止在終端中打印error_log()
消息。防止在測試期間將error_log()消息打印到終端
在上面的例子中,被測試的方法穿過一個error_log中(「唐\」噸顯示'),打印測試之間它的消息。
有什麼辦法可以防止這種行爲,讓我的測試日誌保持幻想?另外,有沒有什麼方法可以捕捉消息並測試其輸出? (對於消息不是簡單字符串的情況)。
正如標題所述,我期待在我的PHPUnit
測試期間找到一種方法來防止在終端中打印error_log()
消息。防止在測試期間將error_log()消息打印到終端
在上面的例子中,被測試的方法穿過一個error_log中(「唐\」噸顯示'),打印測試之間它的消息。
有什麼辦法可以防止這種行爲,讓我的測試日誌保持幻想?另外,有沒有什麼方法可以捕捉消息並測試其輸出? (對於消息不是簡單字符串的情況)。
有什麼辦法來防止這種行爲,讓我的測試日誌保持幻想?另外,有沒有什麼方法可以捕捉消息並測試其輸出? (對於消息不是簡單字符串的情況)。
首先你看到的不是測試日誌。 顯示的錯誤消息實際上是標準錯誤流而不是標準輸出流。對於你所看到的,這並沒有什麼不同,因爲終端顯示兩者混合在一起,記錄到文件不會記錄該錯誤消息。
這是b/c error_log()
將錯誤消息寫入配置的日誌文件(PHP的error_log
ini指令)。由於Phpunit使用CLI的CLI版本(在命令行上)運行,因此默認情況下爲所述標準錯誤流。
這也包含所有需要的信息,以不輸出到標準錯誤流但是捕獲它,例如,暫時爲測試:
$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
"
與測試例結束時,臨時文件被自動刪除。
您可以使用set_error_handler()
來定義自己的錯誤處理程序。在評論#112881中,您可以看到一個使用回調的示例,您可以根據自己的需要進行調整,例如登錄文件,簡單地忽略或不管。
你可以把它放到你的phpunit bootstrap文件中,那應該可以做到。