Менеджер сущностей Doctrine аварийно завершает работу и не работает

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

Я настроил EM в своих тестах/bootstrap.php:

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

Затем я установил его внутри тестовой функции setUp() ($this->_service — это тестируемый сервис):

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

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

Пробовал клонировать ЭМ перед установкой в ​​сервисе, но не получилось.

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


person kix    schedule 13.07.2011    source источник


Ответы (1)


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

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

person Sander Marechal    schedule 13.07.2011