Doctrine实体经理崩溃并停留下来

时间:2011-07-13 05:31:11

标签: php phpunit doctrine-orm

因此,当我在我的ZF / Doctrine应用程序上运行测试时,一些测试会破坏Doctrine Entity Manager,并且由于EM被关闭,所有顺序测试都会失败。

我在我的tests / bootstrap.php中设置了EM:

$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方法重新打开EM?

1 个答案:

答案 0 :(得分:6)

不,不管怎样我都不知道。最简单的方法是简单地(重新)引导应用程序在每个测试的设置阶段运行。因此,每个测试都会获得一个新的$application实例以及一个新的$em新实例。这是快速修复。

正确的解决方案可能是将您的测试与Zend_Application分开。允许您的测试使用简单的实体管理器运行,可能使用模拟连接或与in-memory SQLite database的连接。在测试设置阶段仅创建此实体管理器,因此每个测试都会获得一个新的实体管理器。这类似于上面的快速修复,除了现在您只专门创建一个实体管理器进行测试,而不是为每个测试引导整个应用程序。它更精简,更简单。