Итак, когда я запускаю тесты в своем приложении 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');
Затем я устанавливаю его внутри функции setUp () test ($ this -> _ service – проверяемая служба):
$em = App::getEntityManager(); $this->_em = clone $em; $this->_service->setEm($this->_em);
И затем, когда я запускаю тест, который заставляет EM бросать исключение и закрывать (и это правильное поведение для меня), он остается закрытым во всех тестах, которые, конечно, терпят неудачу из-за закрытия EM. Как вы можете догадаться, это не то поведение, которое я ожидаю от тестов.
Я попытался клонировать EM, прежде чем устанавливать его в службе, но это не сработало.
Есть ли простой способ снова открыть EM, используя некоторые методы Doctrine?
Нет, не то, что я знаю. Самый простой способ – просто (переустановить) загрузку приложения для запуска на этапе настройки каждого теста. Таким образом, каждый тест получает новый экземпляр $application
и новый, новый $em
вместе с ним. Это быстрое решение.
Правильное решение, вероятно, состоит в том, чтобы отделить ваши тесты от вашего Zend_Application
. Позвольте вашим тестам работать с простым менеджером сущностей, возможно, используя макет соединения или соединение с базой данных SQLite в памяти . Создайте только этот менеджер объектов на этапе тестирования, поэтому каждый тест получает новый менеджер сущностей. Это похоже на быстрое исправление выше, за исключением того, что теперь вы только специально создаете диспетчер объектов для тестирования вместо того, чтобы загружать все ваше приложение для каждого теста. Это компактнее и проще.