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

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

Время на прочтение 1 мин
Количество просмотров 1.5K
Здравствуйте. Как известно, 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.

Буду рад критике.
Теги:
Хабы:
+5
Комментарии 4
Комментарии Комментарии 4

Публикации

Истории

Работа

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

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

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн