Оператор Erlang ++
просто синтаксический сахар для списков: concat
или это совсем другая операция? Я пробовал искать это, но невозможно найти в Google "++" что-нибудь полезное.
Я легко могу имитировать экземпляр PDO, который будет внедрен в класс сопоставителя, но я не могу понять, как имитировать класс PreparedStatement, поскольку ...
Я пытаюсь выполнить модульное тестирование класса сопоставителя с помощью PHPUnit. Я легко могу имитировать экземпляр PDO, который будет внедрен в класс сопоставителя, но я не могу понять, как имитировать класс PreparedStatement, поскольку он генерируется классом PDO.
В моем случае я расширил PDO class, поэтому у меня есть это:
public function __construct($dsn, $user, $pass, $driverOptions)
{
//...
parent::__construct($dsn, $user, $pass, $driverOptions);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('Core_Db_Driver_PDOStatement', array($this)));
}
Дело в том, что Core_Db_Driver_PDOStatement не внедряется в конструктор класса PDO, он создается статически. И даже если я сделаю это:
public function __construct($dsn, $user, $pass, $driverOptions, $stmtClass = 'Core_Db_Driver_PDOStatement')
{
//...
parent::__construct($dsn, $user, $pass, $driverOptions);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array($stmtClass, array($this)));
}
... это все еще статическая инстанциация, поскольку я не могу передать свой собственный фиктивный экземпляр подготовленного класса операторов.
Есть идеи?
Изменить: Решение, адаптированное из anwser:
/**
* @codeCoverageIgnore
*/
private function getDbStub($result)
{
$STMTstub = $this->getMock('PDOStatement');
$STMTstub->expects($this->any())
->method('fetchAll')
->will($this->returnValue($result));
$PDOstub = $this->getMock('mockPDO');
$PDOstub->expects($this->any())
->method('prepare')
->will($this->returnValue($STMTstub));
return $PDOstub;
}
public function testGetFooById()
{
$arrResult = array( ... );
$PDOstub = $this->getDbStub($arrResult);
}