2014-02-14 130 views
0

我目前正在爲我編寫的mysqli包裝類編寫單元測試。PHPUnit對於相同的代碼具有不同的行爲

其中一項測試是使用錯誤的憑證檢查連接到MySQL。

這是類c'tor代碼:

public function __construct($host, $userName, $password, $databaseName) 
{ 
    $this->m_sqlConn = new mysqli($host, $userName, $password, $databaseName); 
    if(!mysqli_connect_error()) 
    { 
      //... 
    } 
    else 
    { 
     throw new FailedToConnectDatabaseException($this->getLastDatabaseErrorStr()); 
    } 
} 

當調試我的PHP代碼(與XDebug的),沒有錯誤,也沒有異常的時候拋出創建新的mysqli

(我運行這個行:)

$conn = new MySQLConnection("localhost", "WRONG_USERNAME", "WRONG_PASSWORD", "NON_EXISTANT_DB"); 

但是當PHPUnit的運行相同的代碼時,測試:

public function test_wrongCredentials() { 
     $this->object = new MySQLConnection("localhost", "WRONG_USERNAME", "WRONG_PASSWORD", "NON_EXISTANT_DB"); 
    } 

到達錯誤處理程序說

「的mysqli :: mysqli的()(HY000/1045):拒絕訪問用戶 'WRONG_USERNAME' @ 'localhost' 的(使用密碼:YES)」

可能是什麼原因,或者有什麼我不知道的?

+0

你想要我們隨機猜測,還是要提出一些代碼? –

+0

@DamienBlack增加了類,php單元,調試代碼。 – Taru

+0

我們需要你PHPunit的代碼,因爲這是拋出錯誤。 –

回答

0

你得到的異常預計是因爲你的代碼具體拋出它。

在PHPUnit中處理這個問題的方法是使用annotation來告訴它'預期異常'。在你的情況下,適當的註釋很奇怪,@expectedException

所以你的測試應該是這個樣子: -

/** 
* @expectedException FailedToConnectDatabaseException 
*/ 
public function test_wrongCredentials() 
{ 
    $this->object = new MySQLConnection("localhost", "WRONG_USERNAME", "WRONG_PASSWORD", "NON_EXISTANT_DB"); 
} 

這應該使你的測試通過,而不訴諸使用邪惡@。

相關問題