0

Doctrine で Symfony2 と PHPUnit を使用し、プラグイン バンドルを作成しています。Symfony の WebTestCase を拡張する TestCase クラスがあります。

setUp メソッドの実行中に、テスト用のスキーマを作成し、いくつかのフィクスチャをロードする必要があります。

私のコード (以下) は、アプリ カーネルを構築し、アプリケーションを起動し、いくつかのコマンドを実行して、スキーマが存在する場合はそれを削除し、スキーマを再作成して、いくつかのデータ フィクスチャをロードします。

私が得ている問題は、アプリケーションで run() メソッドを使用すると、最初のコマンドのみが実行され、その後テストが停止し、エラーやメッセージなしで成功としてマークされることです。

次のコマンドを実行するには、最初のコマンドを賞賛して、もう一度テストを実行する必要があります。

明らかに、私の望ましい結果は、各メソッドが順番に実行されることです。

/**
 * setUp
 *
 * @return void
 **/
public function setUp()
{
    parent::setUp();

    $this->appKernel = $this->createKernel();
    $this->appKernel->boot();

    $this->application = new Application($this->appKernel);

    $this->em = $this->appKernel->getContainer()->get('doctrine')->getManager();

    $this->buildDb();
}

/**
 * buildDb
 * Builds the DB from the Entities in Acme\TestBundle\Entity
 * @return void
 **/
private function buildDb()
{
    $this->application->run(new ArrayInput(array(
        'doctrine:schema:drop',
        '--force' => true
    )));

    $this->application->run(new ArrayInput(array(
        'doctrine:schema:create'
    )));

    $this->application->run(new ArrayInput(array(
        'doctrine:fixtures:load',
        '--fixtures' => 'tests/SupportFiles/bundles/Acme/TestBundle/DataFixtures/Test'
    )));

}
4

2 に答える 2

0

独自のバージョンを作成する代わりに、テスト ケースごとにクリーンなデータベースを簡単に作成し、適切なデータ フィクスチャをロードできるICBaseTestBundleをチェックすることをお勧めします。

于 2013-02-17T01:22:31.227 に答える
0

これが起こらないようにする方法を発見しました。

Application クラスはデフォルトで、コマンドの実行後に実行を停止します。これを停止するには、引数として「false」を渡して Application のメソッドを呼び出す必要があります。

$this->application->setAutoExit(false);
于 2013-02-15T10:31:14.977 に答える