私はPHPUnitの実行ごとに約200個のテストを実行しているため、ZF3とDoctrineのPHPUnitテストで「接続が多すぎます」という問題に直面しています。 私はすでにスタックオーバーフローに関するいくつかの質問と回答を見つけましたが、これらの作業はできません。PHPUnitのテストとDoctrineの接続が多すぎます
マイセットアップ: ZF2/ZF3、Doctrine 2、PHPUnit。
public function setUp()
{
$this->setApplicationConfig(Bootstrap::getConfig());
Bootstrap::loadAllFixtures();
if (!static::$em) {
echo "init em";
static::$em = Bootstrap::getEntityManager();
}
parent::setUp();
....
}
public function tearDown()
{
parent::tearDown();
static::$em->flush();
static::$em->clear();
static::$em->getConnection()->close();
$refl = new \ReflectionObject($this);
foreach ($refl->getProperties() as $prop) {
if (!$prop->isStatic() && 0 !== strpos($prop->getDeclaringClass()->getName(), 'PHPUnit_')) {
$prop->setAccessible(true);
$prop->setValue($this, null);
}
}
gc_collect_cycles();
}
public static function (Bootstrap::)loadAllFixtures()
{
static::$em->getConnection()->executeUpdate("SET foreign_key_checks = 0;");
$loader = new Loader();
foreach (self::$config['data-fixture'] as $fixtureDir) {
$loader->loadFromDirectory($fixtureDir);
}
$purger = new ORMPurger(static::$em);
$executor = new ORMExecutor(static::$em, $purger);
$executor->execute($loader->getFixtures());
$executor = null;
$purger = null;
static::$em->getConnection()->executeUpdate("SET foreign_key_checks = 1;");
static::$em->flush();
static::$em->clear();
}
Iが増加しているinnotopとの接続の数と私のローカルのMySQLサーバーを監視しています:
は、私はすべてのテストと、このような確立とティアダウン機能の一見のための基本テストクラスを持っています。
私には何か不足しているアイディアがありますか?
は、 アレクサンダー
アップデート2017年2月14日ありがとう: を私はstatic::$em
を使用するための機能を変更し、Bootstrap::loadAllFixtures
方法を追加しました。
static::$em->close()
にtearDown
メソッドを追加すると、「EntityManager already closed」のようなメッセージですべての後続テストが失敗します。 echo "init em";
は一度だけ呼び出され、最初のテストで表示されます。 私のアプリケーションが接続を開かずに接続を開くかどうかチェックする可能性はありますか?私のテストケースは、AbstractHttpControllerTestCaseに基づいています。
すべてのテストで同じ接続を共有してみませんか? 'setUpBeforeClass()'関数を使用し、 '$ this-> em'を' static :: $ em'のような静的に設定することができました。クラスごとに定義されているテストの数に応じて、役立つはずです。 – segFault
@sebastianForsbergの答えはおそらく行く方法ですが、各テスト後に$ em-> clear()を忘れないと、予期しない結果が生じる可能性があります。 – LBA
static :: $ emを使用するようにテストを変更しましたが、問題は解決しません。実行されたテストごとに、接続数が1ずつ増えます。アプリケーションがすべての接続を閉じないかどうかを確認する方法はありますか? –