我正在尝试使用Doctrine 2 ORM设置我的PHPUnit测试。但是,我遇到了一些奇怪的问题,我只能假设这些问题归结为某种缓存(在Doctrine的最后),我无法弄清楚如何克服。这就是我所拥有的:
setUp函数:
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的方式中有一些错误的代码。
由于
答案 0 :(得分:1)
所以我不完全确定问题出在哪里或者是什么,但似乎Doctrine必须在某个地方进行缓存。毕竟,我确保我的对象具有正确的值后保留但预先刷新。后冲洗它突然有一个不同于预期的价值。
无论如何,为了解决这个问题,我添加了以下内容:
$this->em->clear();
从我的Bootstrap获取学说资源之后。这可确保在删除和重新创建架构之前,从Entity Manager中完全清除所有托管实体。