2013-02-14 77 views
0

我使用Symfony2和PHPUnit与Doctrine并编写插件包。我有一个扩展Symfony的WebTestCase的TestCase类。Symfony2:在PHPUnit中创建模式一次只运行一个命令

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

} 

回答

0

刚刚发现如何阻止这种情况发生。

默认情况下,Application类在运行命令后停止执行。为了阻止它这样做,在应用程序的方法必须作为参数“假”通过被称为:

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

我会鼓励你检查出ICBaseTestBundle它可以处理很容易为每个测试用例创建一个干净的数据库,并加载适当的数据装置,而不是编写自己的版本。