使用PHPUnit的Strange Doctrine 2行为

时间:2012-08-06 12:56:10

标签: doctrine-orm phpunit

我正在尝试使用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的方式中有一些错误的代码。

由于

1 个答案:

答案 0 :(得分:1)

所以我不完全确定问题出在哪里或者是什么,但似乎Doctrine必须在某个地方进行缓存。毕竟,我确保我的对象具有正确的值后保留但预先刷新。后冲洗它突然有一个不同于预期的价值。

无论如何,为了解决这个问题,我添加了以下内容:

$this->em->clear();

从我的Bootstrap获取学说资源之后。这可确保在删除和重新创建架构之前,从Entity Manager中完全清除所有托管实体。