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

时间:2015-03-31 19:30:33

标签: php pdo phpunit

我正在使用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 documentation

返回false

测试方法,我想实现:

testSignupInsertRowFailAndReturnZeroValue()

测试这个是否有意义?


修改

这是一个简单模拟的解决方案:

$pdoMock = $this->getMockBuilder('PDO')
            ->disableOriginalConstructor()
            ->getMock();

    $pdoMock->method("prepare")
            ->will($this->returnValue(new \PDOStatement()));

1 个答案:

答案 0 :(得分:0)

根据{{​​3}},

execute会在成功时返回true,并在失败时返回false

如果我正确理解您的问题,您可以检查您的查询是否失败,例如:

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