2017-07-27 237 views
0

尋找一些幫助來編寫更好的代碼/測試,但似乎馬上就發現了一個問題 - 任何幫助將不勝感激。PHPUnit沒有捕捉異常

腳本:

$feed = 'App\Http\Services\Supplier\Feeds\\' . ucwords($feedName) . "Feed"; 

if (class_exists($feed)) { 
    return new $feed($headerRowToSkip); 
} else { 
    throw new Exception("Invalid feed type given."); 
} 

測試:

public function testBuild() 
{ 
    SupplierFeedFactory::build('MusicMagpie', 1); 
    $this->expectExceptionMessage("Invalid feed type given."); 
} 

錯誤:

有1次失敗:

1)測試\功能\帳戶\供應商\飼料\ SupplierFeedFactoryTest :: testBuild 無法斷言「異常」類型的異常是拋出。

+0

期望值必須在測試代碼之前表達。否則,它們是無用的。就好像你在雨停後買傘一樣。在你的情況下,調用'$ this-> expectExceptionMessage()'的行不會運行,因爲測試的代碼('SupplierFeedFactory :: build()')已經拋出了異常。 – axiac

回答

1

PHPUnit方法是字面的,EXPECTexception所以你所要做的就是在異常發生之前把它放好。

public function testBuild() 
{ 
    $this->expectException('Exception'); 
    $this->expectExceptionMessage("Invalid feed type given."); 
    SupplierFeedFactory::build('MusicMagpie', 1); 
} 
+0

您也可以使用註解,https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html和其他示例,例如網站上的問答:https:// stackoverflow.com/a/39837176/367456 – hakre