Symfony2:在PHPUnit中创建架构一次只运行一个命令

Symfony2:在PHPUnit中创建架构一次只运行一个命令,php,symfony,doctrine,phpunit,Php,Symfony,Doctrine,Phpunit,我正在使用Symfony2和PHPUnit,并编写一个插件包。我有一个扩展Symfony的WebTestCase的TestCase类 在设置方法期间,我需要创建一个用于测试和加载一些装置的模式 我的代码(如下)是构建一个应用程序内核,启动一个应用程序,然后运行几个命令删除一个架构(如果有),重新创建它并加载一些数据装置 我遇到的问题是,在应用程序上使用run()方法时,它只运行第一个命令,然后测试停止,标记为成功,没有错误或消息 为了执行下一个命令,我需要执行第一个命令并再次运行测试 显然,我期

我正在使用Symfony2和PHPUnit,并编写一个插件包。我有一个扩展Symfony的WebTestCase的TestCase类

在设置方法期间,我需要创建一个用于测试和加载一些装置的模式

我的代码(如下)是构建一个应用程序内核,启动一个应用程序,然后运行几个命令删除一个架构(如果有),重新创建它并加载一些数据装置

我遇到的问题是,在应用程序上使用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'
    )));

}

刚刚发现如何阻止这种事情发生

默认情况下,应用程序类在命令运行后停止执行。要停止此操作,必须调用应用程序中的方法,并将“false”作为参数传递:

$this->application->setAutoExit(false);

我鼓励您检查哪个可以轻松地为每个测试用例创建干净的数据库,并加载适当的数据装置,而不是编写自己的版本