我正在为我编写的mysqli包装器类编写单元测试。
其中一项测试是使用错误的凭据检查连接到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)
您所获得的异常是预期的,因为您的代码专门抛出它。
在PHPUnit中处理这个问题的方法是使用annotation来告诉它'预期的异常'。在你的情况下,适当的注释是奇怪的,@expectedException。
所以你的测试应该是这样的: -
/**
* @expectedException FailedToConnectDatabaseException
*/
public function test_wrongCredentials()
{
$this->object = new MySQLConnection("localhost", "WRONG_USERNAME", "WRONG_PASSWORD", "NON_EXISTANT_DB");
}
这应该让你的测试通过,而不是使用邪恶的@。