Как стать автором
Обновить

PDO: сериализация, поздняя инициализация и PHPUnit

Время на прочтение1 мин
Количество просмотров1.6K
Здравствуйте. Как известно, PDO не поддерживает сериализацию. С этим связано несколько интересных вещей, в частности сюрпризы с трейсами и невозможность сделать mock от PDO в PHPUnit.

Я активно использую 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.

Буду рад критике.
Теги:
Хабы:
Всего голосов 15: ↑10 и ↓5+5
Комментарии4

Публикации

Работа

PHP программист
82 вакансии

Ближайшие события