Оператор Erlang ++. Синтаксический сахар или отдельная операция?

Оператор 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);
}
8
задан edorian 11 January 2012 в 11:03
поделиться