0

我正在将 Symfony2 和 PHPUnit 与 Doctrine 一起使用并编写插件包。我有一个扩展 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

I would encourage you to check out ICBaseTestBundle which can handle easily creating a clean database for each test case, and loading appropriate data fixtures, instead of writing your own version of doing it.

于 2013-02-17T01:22:31.227 回答
0

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

默认情况下,Application 类在命令运行后停止执行。要阻止它这样做,必须调用 Application 中的一个方法,并将“false”作为参数传递:

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