我正在使用Symfony2和PHPUnit与Doctrine并编写一个插件包。我有一个TestCase类扩展了Symfony的WebTestCase。
在setUp方法中,我需要创建一个架构来测试并加载一些灯具。
我的代码(下面)正在构建一个app内核,启动一个应用程序,然后运行几个命令来删除一个架构,如果它存在,重新创建它并加载一些数据夹具。
我遇到的问题是,当在Application上使用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 :(得分:0)
刚刚发现了如何阻止这种情况发生。
默认情况下,Application类在运行命令后停止执行。要阻止它执行此操作,必须调用Application中的方法,并将'false'作为参数传递:
$this->application->setAutoExit(false);
答案 1 :(得分:0)
我建议您查看ICBaseTestBundle,它可以轻松地为每个测试用例创建一个干净的数据库,并加载适当的数据夹具,而不是编写自己的版本。