2012-08-06 44 views
1

我想设置我的PHPUnit测试与教条2 ORM。然而,我得到的奇怪问题我只能假设为某种缓存(在Doctrine的结尾),我无法弄清楚如何克服。这是我的本钱:奇怪的学说2行为与PHPUnit

的设置功能:

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的记录。换句话说,第二个测试是从第一个测试中获得$值。 我已经通过在第二次测试开始时转储所有记录进行了双重检查,并且这不会返回任何内容。看来在Doctrine中有一些我不知道的缓存问题。

我试着清除,我所知道主义有可能确保各种高速缓存,如:

$cacheDriver = new \Doctrine\Common\Cache\XcacheCache(); 
$cacheDriver->deleteAll(); 

任何人都可以提出什么我能试试吗?或者在我实现了Doctrine的方式中,有一些错误的代码。

感谢

+0

它不应该与缓存相关,你可以请你发布你的单元测试的内容吗? – WizardZ 2012-08-07 07:04:54

回答

1

所以我不能完全肯定或什么的问题是在哪里,但似乎主义必须已缓存的地方下了线。毕竟,我确保了我的对象具有正确的值,但是在预冲洗后仍然存在。后冲洗它突然有一个不同于预期的价值。

总之,要解决这个问题,我添加以下行:

$this->em->clear(); 

只是从我的引导得到学说资源之后。这确保在删除和重新创建模式之前,所有被管实体都从Entity Manager中完全清除。