Doctrine orm 奇怪的第2条原则与PHPUnit的行为
我正试图用条令2 ORM设置我的PHPUnit测试。然而,我发现了一些奇怪的问题,我只能假设这些问题归结于某种缓存(从理论上讲),我不知道如何克服这些问题。这就是我得到的: 设置功能:Doctrine orm 奇怪的第2条原则与PHPUnit的行为,doctrine-orm,phpunit,Doctrine Orm,Phpunit,我正试图用条令2 ORM设置我的PHPUnit测试。然而,我发现了一些奇怪的问题,我只能假设这些问题归结于某种缓存(从理论上讲),我不知道如何克服这些问题。这就是我得到的: 设置功能: public function setUp() { $front = Zend_Controller_Front::getInstance(); $bootstrap = $front->getParam("bootstrap"); if(!$boostrap) {
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。
在第二次测试开始时,我通过转储所有记录进行了双重检查,但没有返回任何结果。在我不知道的某个地方,条令中似乎存在一些缓存问题
我尝试过清除各种我知道Dority可以确保的缓存,例如:
$cacheDriver = new \Doctrine\Common\Cache\XcacheCache();
$cacheDriver->deleteAll();
有人能给我提些别的建议吗?或者在我实现教义的过程中,是否有一些错误的代码
谢谢所以我不完全确定问题出在哪里或什么地方,但似乎条令一定是在某个地方缓存的。毕竟,我确保了我的对象具有正确的值post persist,而pre flush。刷新后,它的值突然与预期值不同 无论如何,为了解决这个问题,我添加了以下行:
$this->em->clear();
刚刚从我的引导程序中获取了条令资源。这可确保在删除和重新创建架构之前,从实体管理器中完全清除所有托管实体。它不应与缓存相关,您可以发布单元测试的内容吗?