Менеджер сущностей Доктрины падает и не работает - PullRequest
6 голосов
/ 13 июля 2011

Итак, когда я запускаю тесты для моего приложения ZF / Doctrine, некоторые тесты могут привести к поломке Doctrine Entity Manager, и все последовательные тесты не выполняются из-за закрытия EM.

Я установил EM вмои тесты / bootstrap.php:

$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();
(...)
$bootstrap = $application->getBootstrap();
$em = $bootstrap->getResource('doctrinemanager');

Затем я устанавливаю его в функции test setUp () ($ this -> _ service - это тестируемая служба):

$em = App::getEntityManager();
$this->_em = clone $em;
$this->_service->setEm($this->_em);

Изатем, когда я запускаю тест, который заставляет EM генерировать исключение и закрывать (и это правильное поведение для меня), он остается закрытым на протяжении всех тестов, которые, конечно же, терпят неудачу из-за закрытия EM.Как вы можете догадаться, такого поведения я не ожидаю от тестов.

Я пытался клонировать EM перед установкой в ​​сервис, но он не работал.

Есть ли простойспособ открыть EM, возможно, с помощью некоторых методов Doctrine?

1 Ответ

6 голосов
/ 13 июля 2011

Нет, не то чтобы я все равно знал.Самый простой способ обойти это - просто (пере) загрузить приложение для запуска на этапе настройки каждого теста.Таким образом, каждый тест получает новый $application экземпляр и новый, новый $em вместе с ним.Это быстрое решение.

Правильное решение, вероятно, состоит в том, чтобы отделить ваши тесты от вашего Zend_Application.Позвольте вашим тестам запускаться с помощью простого менеджера сущностей, возможно, с использованием фиктивного соединения или соединения с базой данных * SQLite в памяти .Создайте только этого менеджера сущностей на этапе настройки теста, чтобы каждый тест получал нового менеджера сущностей.Это похоже на быстрое исправление, описанное выше, за исключением того, что теперь вы только специально создаете менеджер сущностей для тестирования вместо того, чтобы загружать все ваше приложение для каждого теста.Это стройнее и проще.

...