Здравствуйте. Как известно, PDO не поддерживает сериализацию. С этим связано несколько интересных вещей, в частности сюрпризы с трейсами и невозможность сделать mock от PDO в PHPUnit.
Я активно использую PHPUnit и реализуя в очередной раз паттерн Dependency Injection столкнулся с описанными трудностями создания Mock-объекта от PDO.
Вот чего хотелось добиться:
В качестве решения был написан класс LazyPDO, наследник PDO, который можно безболезненно мокать и (де)сериализовать, при чем он сохраняет набор атрибутов соединения, независимо от того, были они переданы в конструктор или в setAttribute(). Код выложен на GitHub.
Буду рад критике.
Я активно использую PHPUnit и реализуя в очередной раз паттерн Dependency Injection столкнулся с описанными трудностями создания Mock-объекта от PDO.
Вот чего хотелось добиться:
class MyTest
extends \PHPUnit_Framework_TestCase
{
...
protected function setUp()
{
$this->pdo = $this->getMock('PDO');
$this->myObject = new MyClass($this->pdo);
}
}
* This source code was highlighted with Source Code Highlighter.
В качестве решения был написан класс LazyPDO, наследник PDO, который можно безболезненно мокать и (де)сериализовать, при чем он сохраняет набор атрибутов соединения, независимо от того, были они переданы в конструктор или в setAttribute(). Код выложен на GitHub.
Буду рад критике.