2010-03-09 105 views
2

我開始關注PHPUnit,並試圖爲現有類構建測試用例。單元測試課 - 拋出錯誤嗎?

該類是一個靜態配置類,獲取,設置和列出將在應用程序中可用的配置選項。

這門課非常嚴格。如果我嘗試設置具有不兼容值的配置設置或不存在的配置設置,則會引發E_USER_ERROR,從而停止腳本的執行。即使它不是錯誤處理的優良技術,但對於這個類的用途來說,它仍然可以正常工作。該類中的錯誤始終是編程錯誤的結果,並且決不會導致用戶輸入錯誤。

這具有很大的優勢,您不必擔心錯誤消息如何處理或記錄,從而使代碼更加纖細。輸出消息(或不在生產中),死(),完成。

但是,通過單元測試,我沒有看到如何繼續處理經典的PHP錯誤。我將不得不轉換函數返回成功標誌,或拋出異常。

我正確嗎?

或者有沒有一種方式在PHPUnit期望錯誤,因爲有期望異常?我馬上看不到任何東西。

回答

7

PHPUnit manual

默認情況下,PHPUnit的轉換PHP錯誤,警告和被測試的執行,以異常時觸發通知。例如,使用這些例外,您可以期望一個測試觸發PHP錯誤,如例4.8所示。

class ExpectedErrorTest extends PHPUnit_Framework_TestCase 
{ 
    /** 
    * @expectedException PHPUnit_Framework_Error 
    */ 
    public function testFailingInclude() 
    { 
     include 'not_existing_file.php'; 
    } 
} 

同一作品當然是例外。

編輯:沒有看到這是在評論中已經提到,但我會離開這裏以供參考,以防有人尋找同樣的問題,不讀取評論

+0

是的,@Wim已經指出了這一段,我完全重讀了那段。輝煌,我不需要改變任何事情。 – 2010-03-09 14:10:58

+2

+1不像我們其他人一樣盲目;)。 – middus 2010-03-09 14:20:47

+0

@Pekka對不起,沒有看到它。由於您近期似乎在詢問大量的PHPUnit問題,因此您可以在http://www.phphatesme.com/blog/qualitatssicherung/phpunit-eine-einfuhrung/(德文) – Gordon 2010-03-09 14:35:03

1

我不知道你的實現的細節,但你不能提出一個正常的(自定義)異常(可以測試),並在你的應用程序中有一個全局的異常處理程序,將拋出正確的E_USER_ERROR基於這些(自定義)異常?

有關設置此全局異常處理程序的更多信息,請參閱set_exception_handler

+0

如果我理解正確的話,這將使課程在單元測試中工作,同時保留原始行爲。聽起來不錯! +1 – 2010-03-09 13:51:06

+0

據我瞭解,你必須改變你的班級,以便拋出異常。 – middus 2010-03-09 13:55:53

+2

順便說一句PHPUnit應該能夠測試錯誤,通知和警告以及:http://www.phpunit.de/manual/3.2/en/writing-tests-for-phpunit.html#writing-tests-for- phpunit.errors(我是PHPUnit新手:p)。 – wimvds 2010-03-09 14:01:00

1

難道你不能定義一個錯誤處理程序(通過set_error_handler)將任何PHPUnit無法處理的錯誤(如E_USER_ERROR)視爲單元測試失敗嗎?

(由WordPress' tests啓發)

+0

呃有趣的是,這就像@ Wim的建議,但反過來說,其優點是我不必觸摸現有的類。非常好,我想我會先嚐試一下! – 2010-03-09 13:57:33

2

如果您想取消將警告視爲例外,請使用 PHPUnit_Framework_Error_Warning::$enabled=false;

相關問題