为什么 PHPUnit 仍然因 SQL 错误而失败,即使我已经捕获了异常
Why is PHPUnit still failing on SQL error, even though I have caught the exception
我正在尝试构建一个包装器 class 来简化我的应用程序中的 SQL 访问(除其他外)。当使用 PHPUnit 测试我的 class 时,SQL 错误终止了测试并将错误消息吐出到控制台,尽管我已经捕获并处理了异常。
我试过使用@expectedexception。这行得通,除了我现在不能再做任何断言;我想测试方法 returns 作为数组的错误。
非常感谢任何帮助。
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
// Prepare query and respond to errors. If there is errors, stop processing any more queries
try {
$PDOQuery = $db->prepare($query['query']);
}
catch ( PDOException $error )
{
$error = $error->errorInfo;
$this->parent->errors[] = array( 'type' => 'Database error (Prepare)',
'details' => 'The MySQL server returned an error. Check your DB logs for more details' );
error_log( "SQL Prepare Error code (SQLSTATE): $error[0]");
error_log( "SQL Prepare Error code (Vendor): $error[1]");
error_log( "SQL Prepare Error message: $error[2]");
break;
}
try {
// Execute query and respond to errors. If there is errors, stop processing any more queries
$result = $PDOQuery->execute(isset ($query['params']) ? $query['params'] : array());
}
catch ( PDOException $error ) {
$error = $error->errorInfo();
$logsMessage = "Check your server logs for more information.";
switch($error[1])
{
case 1452: $message = "MySQL failed to add a row. Possibly you missed out some mandatory fields? $logsMessage"; break;
default: $message = "MySQL Returned an error (Execute). $logsMessage"; break;
}
$this->parent->errors[] = array( 'type' => 'Database error',
'details' => $message );
error_log( "SQL Execute Error code (SQLSTATE): $error[0]");
error_log( "SQL Execute Error code (Vendor): $error[1]");
error_log( "SQL Execute Error message: $error[2]");
break;
}
好的,所以我找出问题所在。
我的代码在命名空间中,但我忘记在 catch 语句中引用全局命名空间。
所以我改成了
catch ( \PDOException $error )
我的问题自行解决了。
我正在尝试构建一个包装器 class 来简化我的应用程序中的 SQL 访问(除其他外)。当使用 PHPUnit 测试我的 class 时,SQL 错误终止了测试并将错误消息吐出到控制台,尽管我已经捕获并处理了异常。
我试过使用@expectedexception。这行得通,除了我现在不能再做任何断言;我想测试方法 returns 作为数组的错误。
非常感谢任何帮助。
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
// Prepare query and respond to errors. If there is errors, stop processing any more queries
try {
$PDOQuery = $db->prepare($query['query']);
}
catch ( PDOException $error )
{
$error = $error->errorInfo;
$this->parent->errors[] = array( 'type' => 'Database error (Prepare)',
'details' => 'The MySQL server returned an error. Check your DB logs for more details' );
error_log( "SQL Prepare Error code (SQLSTATE): $error[0]");
error_log( "SQL Prepare Error code (Vendor): $error[1]");
error_log( "SQL Prepare Error message: $error[2]");
break;
}
try {
// Execute query and respond to errors. If there is errors, stop processing any more queries
$result = $PDOQuery->execute(isset ($query['params']) ? $query['params'] : array());
}
catch ( PDOException $error ) {
$error = $error->errorInfo();
$logsMessage = "Check your server logs for more information.";
switch($error[1])
{
case 1452: $message = "MySQL failed to add a row. Possibly you missed out some mandatory fields? $logsMessage"; break;
default: $message = "MySQL Returned an error (Execute). $logsMessage"; break;
}
$this->parent->errors[] = array( 'type' => 'Database error',
'details' => $message );
error_log( "SQL Execute Error code (SQLSTATE): $error[0]");
error_log( "SQL Execute Error code (Vendor): $error[1]");
error_log( "SQL Execute Error message: $error[2]");
break;
}
好的,所以我找出问题所在。
我的代码在命名空间中,但我忘记在 catch 语句中引用全局命名空间。
所以我改成了
catch ( \PDOException $error )
我的问题自行解决了。