【问题标题】:Doctrine's entity manager crashes and stays downDoctrine 的实体管理器崩溃并保持关闭
【发布时间】:2011-10-04 04:55:33
【问题描述】:

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

我在我的测试/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?

【问题讨论】:

    标签: php phpunit doctrine-orm


    【解决方案1】:

    不,反正我不知道。解决此问题的最简单方法是简单地(重新)引导您的应用程序以在每个测试的设置阶段运行。因此,每个测试都会获得一个新的$application 实例和一个全新的$em。这就是快速修复。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多