【发布时间】:2012-08-03 10:49:42
【问题描述】:
我正在尝试使用 Doctrine 2 ORM 设置我的 PHPUnit 测试。但是,我遇到了一些奇怪的问题,我只能假设是某种缓存(在 Doctrine 结束时),我无法弄清楚如何克服。这就是我所拥有的:
一个设置函数:
public function setUp()
{
$front = Zend_Controller_Front::getInstance();
$bootstrap = $front->getParam("bootstrap");
if(!$boostrap) {
$application = Zend_Registry::get("application");
$bootstrap = $application->getBootstrap();
}
$bootstrap->bootstrap('doctrine');
$this->em = $bootstrap->getResource('doctrine');
$tool = new \Doctrine\ORM\Tools\SchemaTool($this->em);
$classes = $this->em->getMetaDataFactory()->getAllMetaData();
$tool->dropSchema($classes);
$tool->createSchema($classes);
parent::setUp();
}
这基本上旨在为每个测试重置教义实例。我还没有 tearDown() 函数,因为目前,它负责重置模式,如图所示。我应该在这里提到我正在使用 SQLite。
我在一个类中尝试运行两个测试,没有依赖关系。第一个测试插入如下记录:
$value = 5;
$model = new Model();
$model->setUserId($rater->getId());
$model->setValue($value);
$this->em->persist($model);
$this->em->flush();
到目前为止,一切都很好。我在数据库中有一条值为 5 的新记录。
进入下一个测试。这次我要跑:
$value = 3;
$model = new Model();
$model->setUserId($rater->getId());
$model->setValue($value);
$this->em->persist($model);
$this->em->flush();
转储相关表中的所有记录会给我一个结果;再次记录值为 5 的记录。换句话说,第二个测试从第一个测试中获取 $value。 我通过在第二次测试开始时转储所有记录进行了仔细检查,这没有返回任何内容。 Doctrine 中似乎存在一些我不知道的缓存问题。
我已经尝试清除各种我知道 Doctrine 可以确定的缓存,例如:
$cacheDriver = new \Doctrine\Common\Cache\XcacheCache();
$cacheDriver->deleteAll();
任何人都可以提出其他我可以尝试的建议吗?或者在我实现 Doctrine 的方式中是否有一些错误的代码。
谢谢
【问题讨论】:
-
应该和缓存没有关系,能发一下你的单元测试内容吗?
标签: doctrine-orm phpunit