如何测试PDO::execute()失败


How to test a PDO::execute() failure

我正在为专业项目使用PDO和PHPUnit。

这是一种方法,在我的代码库中,我想测试:

public function signUp('PDO $pdo) 
{
    $statement = $pdo->prepare("INSERT INTO user VALUES (
        DEFAULT, 
        :firstName, 
        :lastName,
        :salutation,
        :birthday,
        :email,
        :password
    )");
    $statement->bindValue(':firstName', $this->firstName);
    $statement->bindValue(':lastName', $this->lastName);
    // Etc...
    if($statement->execute()) {
        $this->id = $pdo->lastInsertId();
        return $this->id;
    }
    return 0;
}

我想找到一种方法,使我的$statement->execute()失败,并根据PDO文档返回false

以及测试方法,我想实现:

testSignupInsertRowFailAndReturnZeroValue()

测试这个有意义吗?


编辑

这里有一个简单的Mock解决方案:

$pdoMock = $this->getMockBuilder('PDO')
            ->disableOriginalConstructor()
            ->getMock();
    $pdoMock->method("prepare")
            ->will($this->returnValue(new 'PDOStatement()));

execute根据单据返回成功true,失败false

如果我正确理解你的问题,你可以用之类的东西来检查你的查询是否失败

if($statement->execute()) {
  // success
}
else{
  // failure
}