2
我正在編寫單元測試來模仿可怕的MySql已經消失的錯誤,但我有一個問題讓我的模擬對象正確響應。也許有人可以看到我做錯了什麼。Mocking PDOException類無法響應
private function getMockGoneAway()
{
$e = $this->getMockBuilder('PDOException')
->disableOriginalConstructor()
->setMethods([
'getMessage',
'getCode',
])
->getMock();
$e->expects($this->any())
->method('getMessage')
->willReturn('SQLSTATE[HY000]: General error: 2006 MySQL server has gone away');
$e->expects($this->any())
->method('getCode')
->willReturn('HY000');
return $e;
}
這是測試。問題是無論它發生在哪裏,我都無法得到模擬異常以從getMessage或getCode返回預期的結果。
public function testBeginTransactionGoneAway()
{
// get a mock PDO object that overrides beginTransaction method
$mock_pdo = $this->getMockPdo(['beginTransaction']);
// grab a mock gone-away exception object
$mock_gone_away_exception = $this->getMockGoneAway();
die("MSG: ".$mock_gone_away_exception->getMessage());
// setup mock pdo responses
$mock_pdo->expects($this->once())
->method('beginTransaction')
->will($this->throwException($mock_gone_away_exception));
$this->db->replaceConnection($mock_pdo);
$this->db->begin();
}