2010-10-01 119 views
19

我使用PHPUnit的單元測試,但是當致命錯誤被觸發,該腳本死亡我沒有正確的PHPUnit的輸出。PHPUnit的:致命錯誤處理

我想PHPUnit輸出保持正確格式,因爲它是由Eclipse插件讀取的。實際上,致命錯誤會阻止PHPUnit,並且在Eclipse中插件無法解釋任何內容(因爲PHPUnit腳本錯誤,而不是處理它)。

謝謝

+0

什麼樣的致命錯誤?如果它們是語法或語義相關的,那麼你運氣不好。 – stillstanding 2010-10-01 18:55:55

回答

26

捕獲致命錯誤您需要使用PHPUnit的進程隔離功能 - 在新進程中啓動每個測試套件。

phpunit --process-isolation ... 

這是確保致命錯誤不會中斷phpunit輸出的唯一方法。

執行時間

進程隔離乘以你的測試運行時間,因爲每個單獨測試,一個新的PHP實例啓動,引導執行等

要修正這種情況下,你可能選擇在單獨的進程中運行完整的測試用例(@runTestsInSeparateProcesses),或者只選擇一些已知有時會致命的單個測試用例(@runInSeparateProcess)。

+1

儘管它確實大大提高了測試執行力,在這裏只需要150秒的測試就能從4秒到90秒。 – stefgosselin 2011-05-19 04:39:46

+0

您可以禁用「備份全局變量」以獲得更好的測試速度。這也取決於你的引導文件的速度。 – cweiske 2011-05-19 05:42:58

+0

- 當我嘗試運行7000多個測試時,進程隔離會導致巨大的腦損傷,我在--bootstrap和--printer中使用了'register_shutdown_function()'來進行TeamCity集成。本月晚些時候我會分享資料。 – 2012-04-26 16:17:05

2

set_error_handler()不會幫助你。您可以使用register_shutdown_function()

+0

如上所述,我想要一個PHPUnit錯誤(我想phpunit輸出不會被搞砸)。我已經擴展了這個問題的描述。 – 2010-10-01 18:45:18