为什么PHPUnit仍然在SQL错误上失败,即使我捕获了异常

为什么PHPUnit仍然在SQL错误上失败,即使我捕获了异常,php,database,phpunit,Php,Database,Phpunit,我正在尝试构建一个包装器类,以简化应用程序中的SQL访问(以及其他内容)。当使用PHPUnit测试我的类时,一个SQL错误会终止测试并向控制台抛出错误消息,尽管我已经捕获并处理了异常 我尝试使用@expectedexception。这是可行的,除了我现在不能再做任何断言;我想测试该方法是否以数组的形式返回错误 非常感谢您的帮助 $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); // Prepare query

我正在尝试构建一个包装器类,以简化应用程序中的SQL访问(以及其他内容)。当使用PHPUnit测试我的类时,一个SQL错误会终止测试并向控制台抛出错误消息,尽管我已经捕获并处理了异常

我尝试使用@expectedexception。这是可行的,除了我现在不能再做任何断言;我想测试该方法是否以数组的形式返回错误

非常感谢您的帮助

$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)

我的问题自行解决了