2011-07-13 6 views
6

ZF/Doctrineアプリケーションでテストを実行すると、Doctrine Entity Managerが破損し、EMが閉じられているため、すべての順次テストが失敗します。Doctrineのエンティティマネージャがクラッシュして停止する

私は私のテスト/ bootstrap.phpの中にEMを設定します。

$application = new Zend_Application(
    APPLICATION_ENV, 
    APPLICATION_PATH . '/configs/application.ini' 
); 
$application->bootstrap(); 
(...) 
$bootstrap = $application->getBootstrap(); 
$em = $bootstrap->getResource('doctrinemanager'); 

は、それから私は、テスト・セットアップ()関数($この - > _サービスはサービスがテストされている)内に設定します。

$em = App::getEntityManager(); 
$this->_em = clone $em; 
$this->_service->setEm($this->_em); 

そして、私は例外と近くをスローするようにEMを引き起こし(そしてそれは私のために正しい行動だ)テストを実行するときに、それはEMがクローズされることに起因する故障のコースのすべてのテストを通じて閉じたまま。それはあなたが推測できるように、私がテストで期待している動作ではありません。

サービスで設定する前にEMのクローン作成を試みましたが、機能しませんでした。

いくつかのDoctrineメソッドを使用してEMを再オープンする簡単な方法はありますか?

答えて

6

いいえ、私はとにかく分かりません。これを回避する最も簡単な方法は、すべてのテストのセットアップ段階で実行するようにアプリケーションを簡単に(再)ブートストラップすることです。したがって、すべてのテストで新しい$applicationインスタンスと新しい$emが新しく追加されます。それは迅速な修正です。

適切な解決策は、おそらくあなたのテストをあなたのZend_Applicationから切り離すことです。おそらくモック接続やin-memory SQLite databaseへの接続を使用して、簡単なエンティティマネージャでテストを実行できます。テストセットアップ段階では、このエンティティマネージャのみを作成するので、すべてのテストで新しいエンティティマネージャが取得されます。これは上記のクイックフィックスと似ていますが、テストごとにアプリケーション全体をブートストラップするのではなく、テスト用のエンティティマネージャを作成するだけです。よりシンプルでシンプルです。