因此,当我在 ZF/Doctrine 应用程序上运行测试时,某些测试碰巧破坏了 Doctrine 实体管理器,并且所有顺序测试由于 EM 关闭而失败。
我在 test/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,然后将其设置到服务中,但没有成功。
有没有一种简单的方法可以使用一些教义方法来重新打开 EM?
不,据我所知,至少没有。解决这个问题的最简单方法是简单地(重新)引导您的应用程序在每个测试的设置阶段运行。所以,每次测试都会有一个新的$application
实例和新鲜的、新的$em
与它一起。这就是快速解决办法。
正确的解决方案可能是将您的测试与您的Zend_Application
。允许您的测试使用简单的实体管理器运行,可能使用模拟连接或到内存 SQLite 数据库 https://stackoverflow.com/questions/1157996/php-sqlite-copying-a-table-from-disk-to-memory。在测试设置阶段仅创建此实体管理器,因此每个测试都会获得一个新的实体管理器。这与上面的快速修复类似,只不过现在您只专门创建一个用于测试的实体管理器,而不是为每个测试引导整个应用程序。它更精简、更简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)