2012-11-07 42 views
1

,我有以下的僞代碼PHPUnit的setExpectedException後停止執行()

public function testSomething() { 
    // assert something 
    // assert something else 

    $this->setExpectedException(...); 
    // trigger my exception here 

    // do one last thing 
} 

我看到的問題,正在引發異常後的代碼從來沒有。它是否正確?

這只是一個普遍想知道的地方 - 如果這是正常的,我會重構我的測試直接執行try/catch和fail()測試如果沒有被捕獲。

回答

3

不應出現異常後的代碼。將setExpectedException想象爲使測試變爲try -- catch因此拋出異常之後的代碼將不會被執行。

如果您需要在異常後執行/檢查事情,則應該抓住它。雖然有一個警告與你的捕獲,具體是什麼異常被拋出。 PHPUnit爲失敗的測試拋出異常,並且您可能意外捕獲了可能導致測試錯誤傳遞的異常。

更新: 如果您正在執行的代碼正在清理,請考慮將其移動到測試的tearDown方法中。

+1

更好的方法是將測試後必須執行的代碼放入'tearDown'中,PHPUnit將調用是否拋出異常。 –

+0

好點。我主要考慮你可能想要做出的其他斷言。 – Schleis