4

1 つは MySQL データベースを使用し、もう 1 つは SQLite データベースを使用して、2 つの異なる DB 構成に対して Symfony2 アプリケーションの単体テストを実行する必要があります。

現在、単体テストを実行するときに使用する DB 構成を編集して選択していますapp/config/config_test.yml。MySQL 関連の db 設定のコメントを外し、SQLite 関連の db 設定をコメントアウトするか、その逆を行います。

app/config/config-test-mysql.ymlこれを行う必要はなく、代わりに 2 つの構成ファイル (おそらくと とapp/config/config-test-sqlite.yml) を用意し、テストの実行時にコマンド ラインからテスト環境を選択したいと考えています。

でデフォルトの Symfony2 phpunit 構成を調べ、構成がapp/phpunit.xml.dist利用するブートストラップ ファイル ( ) を調べたところ、単体テストを実行app/bootstrap.php.cacheするときに環境がデフォルトでどのようになるかを判断できません。test

単体テストを実行するときに使用する環境を選択するにはどうすればよいですか?

4

1 に答える 1

1

私はこの解決策を試していませんが、これは良いリードだと確信しています。

私の単体テストクラスは拡張され、それ自体がSymfony\Bundle\FrameworkBundle\Test\WebTestCaseを作成する を作成できるようにします。ClientKernel

単体テストでは、これを行うことができます:

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class DatabaseRelatedTest extends WebTestCase
{
    private static $client;

    public function setUp()
    {
        // this is the part that should make things work
        $options = array(
            'environment' => 'test_mysql'
        );
        self::$client = static::createClient($options);
        self::$client->request('GET', '/foo/bar'); // must be a valid url
    }
}

クライアントのコンテナーを使用して、EntityManagerおよび 拡張機能にアクセスできるようになります。Connection

self::$client->getContainer()->get('doctrine')

理想は、ファイルsetUpを使用して環境の名前をメソッドに渡すことです。phpunit.xml.dist中途半端な回答かもしれませんが、良いリードだと思います。

于 2013-03-11T18:38:18.523 に答える