[英]Asserting exceptions using PHPUnit
我正在使用PHPUnit測試此功能:
public function testSetAdsData_dataIsNull()
{
$dataArr = null;
$fixture = new AdGroup();
try {
$fixture->setAdsData($dataArr);
} catch (Exception $e) {
$this->assertEquals($e->getCode(), 2);
}
$this->assertEmpty($fixture->ads);
$this->assertEmpty($fixture->adIds);
}
有人告訴我這不是正確的方法,應該使用@expectedException
,所以我開始閱讀該手冊,並在此處找到一些答案,其中包括一個流行的答案: PHPUnit斷言是否拋出異常?
但是,經過大量的閱讀后,我仍然不明白除了最初的方法外,使用此方法還有什么好處。 我猜這與我不太了解如何使用它有關。 我嘗試了不同的方法,但沒有一個真正起作用。
我意識到我可以在代碼中添加如下代碼:
throw new MyException('Some Error Msg', 2);
但是然后我還需要使用try catch(或者據我所知),那么這樣做有什么好處呢?
我在您的測試中發現了2個問題。
1)測試可以通過而不會引發異常。 函數調用后,應添加$this->fail('No Exception was thrown')
。 使用setExpectedException
將為您完成此操作,如果不引發異常,則測試將失敗。 就您而言,如果發生這種情況,您不會失敗。 您需要設置一個標志並斷言該異常是在catch塊之后引發的。
2)您在測試中捕獲了通用異常。 這不是一個好習慣。 如果您有一個使用模擬的測試,則通過引發異常來指示模擬失敗的斷言。 您的測試將在這里抓住並處理。 再次使您的測試似乎通過了,但實際上沒有通過。 (這也可能在其他斷言失敗並試圖修復測試時引起很多驚嚇時表現出來)。
在示例測試中,您要使用try-catch,因為在執行代碼后您將進行進一步的聲明。 setExpectedException
不允許您執行此操作。 在后台,此方法/注釋將您的測試包裝在自己的try catch中,並為您驗證異常。 到底多少次正是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.