pdo = $this->createMock(PDO::class); $pdoProvider = $this->createMock(PDOProvider::class); $pdoProvider ->expects($this->any()) ->method('get') ->willReturn($this->pdo); $this->sth = $this->getMockBuilder(PDOStatement::class)->disableOriginalConstructor()->getMock(); $this->executor = new DefaultSqlExecutor($pdoProvider); } public function testExecute1() { $sql = "SOME QUERY"; $this->pdo ->expects($this->once()) ->method('query') ->will($this->returnValue($this->sth)) ->with($sql); $sth = $this->executor->execute($sql); $this->assertInstanceOf(PDOStatement::class, $sth); } public function testExecuteException1() { $sql = "SOME QUERY"; $e = new PDOException; $e->errorInfo = [100, 1001]; $this->pdo ->expects($this->once()) ->method('query') ->will($this->throwException($e)); try { $this->executor->execute($sql); } catch (PDOException $e) { } } public function testExecuteException2() { $sql = "SOME QUERY"; $e = new PDOException; $e->errorInfo = [100, 1001]; $this->pdo ->expects($this->once()) ->method('query') ->will($this->throwException($e)); try { $this->executor->execute($sql, true); } catch (PDOException $e) { } } public function testExecuteDeadlock1() { $sql = "SOME QUERY"; $e = new PDOException; $e->errorInfo = [100, 1001]; $this->pdo ->expects($this->once()) ->method('query') ->will($this->throwException($e)); try { $this->executor->execute($sql); } catch (PDOException $e) { } } public function testExecuteDeadlock2() { $sql = "SOME QUERY"; $e = new PDOException; $e->errorInfo = [40001, 1213]; $this->pdo ->expects($this->exactly(2)) ->method('query') ->will( $this->onConsecutiveCalls( $this->throwException($e), $this->returnValue($this->sth) ) ); $sth = $this->executor->execute($sql, true); $this->assertInstanceOf(PDOStatement::class, $sth); } }