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'
)));
}