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 を使用していることに言及する必要があります。
実行しようとしている 1 つのクラスに、依存関係のない 2 つのテストがあります。最初のテストでは、次のようにレコードを挿入します。
$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();
関連するテーブルからすべてのレコードをダンプすると、1 つの結果が得られます。再び 5 の値を持つレコード。つまり、2 番目のテストは最初のテストから $value を取得しています。2 番目のテストの開始時にすべてのレコードをダンプして再確認しましたが、何も返されません。Doctrine のどこかに、私が気付いていないキャッシングの問題があるようです。
Doctrine が確認できる可能性があることを認識しているさまざまなキャッシュをクリアしようとしました。
$cacheDriver = new \Doctrine\Common\Cache\XcacheCache();
$cacheDriver->deleteAll();
私が試すことができる他の何かを誰かが提案できますか? または、私がDoctrineを実装した方法のどこかに誤ったコードがありますか?
ありがとう