2013-11-02 32 views
0

我有以下代碼創建一個新用戶。我正在使用PHPUnit編寫測試用例,但是我的代碼覆蓋範圍無法覆蓋例外情況,即throw new Exception(__CLASS__ . ': Invalid data');.PHPUnit異常

有人可以告訴我如何使用assertInstanceOf()或其他方法介紹phpunit中的異常情況嗎?

/** 
* Creates a new user 
* 
* @param string   $email 
* @param UserType  $UserType 
* 
* @return UserID 
* @throws Exception If Invalid Data is Provided 
*/ 
static public function Create($email, UserType $UserType) 
{ 
    if (!$UserType instanceof UserType) { 
     throw new Exception(__CLASS__ . ': Invalid data'); 
    } 

    $UserID = parent::Create($email, $UserType); 

    return $UserID; 

} 

非常感謝

+0

夥計們,請不要在不知道我在找什麼的情況下將其作爲重複帖子。您發佈的鏈接對我沒有任何幫助,因爲它沒有說明處理類型提示異常的任何內容。謝謝 – user2909892

+0

那是不是重複? – hakre

+0

作爲問題的提出者,您可以告訴我們您「正在尋找什麼」。你還希望如何得到答案? – vascowhite

回答

1

寫,你把別的東西,然後正確類的實例爲參數$用戶類型的測試。例如一個字符串:

/** 
* @covers MyClass::Create 
* @expectedException Exception 
*/ 
public function testCreate() { 
    $myTestedInstance->Create('[email protected]', 'invalid param', ....); 
} 
+1

值得補充一點,PHPUnit不允許您針對\ Exception類進行測試。您必須使用更專門的異常才能對其進行測試(例如:\ InvalidArgumentException)。 – Cyprian

+0

@Cyprian,真的沒有得到你想說的話,請詳細說明一個例外。非常感謝 – user2909892

+0

當然。如果您使用泛型類拋出異常:\ Exception,那麼PHPUnit測試將失敗並顯示以下消息:「InvalidArgumentException:您不能指望泛型異常類。」這意味着如果要測試異常(例如\ InvalidArgumentException或\ LogicException或您自己的異常),則必須使用更專用的異常類。 – Cyprian