0

単体テスト中に、テスト環境でのみ実行されるいくつかのエンティティを作成したいと考えています。いくつかの解決策があるとは思いません (間違っていますか?) ので、おそらく別の方法は、テスト フォルダーにエンティティを作成して使用することです。

しかし、私には理解できないことがあります。symfony はBundleName\Entityフォルダをエンティティが存在するフォルダとして設定し、フォルダTests/Entityは私のエンティティでは機能しません。Tests/Entityでは、テスト ケースでフォルダーを明示的に設定 (エンティティの読み取り/インストール/登録) するにはどうすればよいでしょうか? これは教義エンティティマネージャの設定によって作られていると思いますか?

4

2 に答える 2

2

私のプロジェクトの1つでこの機能を見つけました。少し役立つかもしれません。この関数は、エンティティの名前空間を定義できる新しい EntityManager を作成します。

/**
 * @return EntityManager
 */
public static function createTestEntityManager()
{
    if (!class_exists('PDO') || !in_array('sqlite', \PDO::getAvailableDrivers())) {
        self::markTestSkipped('This test requires SQLite support in your environment');
    }
    $config = new \Doctrine\ORM\Configuration();
    $config->setEntityNamespaces(array('SerializerBundleTests' => 'Top10\SerializerBundle\Tests\Entity'));
    $config->setAutoGenerateProxyClasses(true);
    $config->setProxyDir(\sys_get_temp_dir());
    $config->setProxyNamespace('SerializerBundleTests\Entity');
    $config->setMetadataDriverImpl(new AnnotationDriver(new AnnotationReader()));
    $config->setQueryCacheImpl(new \Doctrine\Common\Cache\ArrayCache());
    $config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ArrayCache());

    $params = array(
        'driver' => 'pdo_sqlite',
        'memory' => true,
    );

    return EntityManager::create($params, $config);
}
于 2013-09-07T04:01:36.510 に答える
0

私は間違っているかもしれませんが、Doctrine のエンティティ マネージャーでは追加エンティティのマッピングをその場で追加することはできないと思います。

「厄介な」回避策として、テストで使用するエンティティを含む追加のバンドルを作成し、テスト環境の Symfony2 構成を同じままにすることができます (「auto_mapping」を true に設定している場合は、このリファレンス ドキュメントを参照してください)。 )、dev および prod 環境の orm 構成を変更している間。自動マッピングを無効にしてバンドルを明示的に指定し、テスト専用エンティティを含むバンドルを「マッピング」から除外する必要があります。

あるいは、 "auto_mapping" の値を指定する必要さえないかもしれません。dev\prod 環境の構成 (「entity_managers」、「mappings」) の関連部分は、クックブック エントリのものと多少似ているはずです。

繰り返しますが、Symfony2 に関する私の知識は少しあいまいになっているため、この答えが正しいと 100% 確信しているわけではないことを強調したいと思います。

于 2013-09-06T16:44:09.313 に答える