symfony2 phpunit:如何在运行测试之前删除并复制数据库?

时间:2015-07-31 21:07:20

标签: php unit-testing symfony testing phpunit

在我的symfony2应用程序中,我使用phpunit来验证每个路由的响应是否有代码200.

在运行测试之前,我想删除测试数据库并在名称test下复制我的生产数据库(即我想重新启动我的测试数据库)。

我了解了public static function setUpBeforeClass(),但我对丢弃和复制数据库感到很遗憾。

我该怎么做?

到目前为止我的课程:

<?php

namespace AppBundle\Tests\Controller;

use AppBundle\FoodMeUpParameters;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

require_once __DIR__.'/../../../../app/AppKernel.php';


class ApplicationAvailabilityFunctionalTest extends WebTestCase
{

    public static function setUpBeforeClass()
    {

    }

    /**
     * @dataProvider routeProvider
     * @param $route
     */
    public function testAllRoutesAreLoaded($route)
    {
        $listedRoutes = $this->getListedRoutes();

        $this->assertArrayHasKey($route, $listedRoutes);
    }
}

2 个答案:

答案 0 :(得分:1)

这是备份MySQL数据库的一些PHP代码。 --routines包括你的视图,函数,存储过程等。

<?php
$schemaFile = "schema.sql";
$mysqlArgs  = "-u {$dbUser} -h {$dbHost} {$dbName}";

//if you don't have a pass and still pass in arg -p it will interrupt and prompt
if (isset($dbPassword) && strlen(trim($dbPassword)) > 0) { 
    $mysqlArgs .= " -p{$dbPassword}";
}

$mysqlDumpCommand = "mysqldump {$mysqlArgs} --routines";
$schemaDump       = "{$mysqlDumpCommand} > {$schemaFile}";
system($schemaDump);

然后使用与上面相同的$mysqlArgs代码导入代码。

$mysqlImportCommand = "mysql {$mysqlArgs}";
$import             = "{$mysqlImportCommand} < {$schemaFile}";
system($import);

答案 1 :(得分:0)

我的5c。通常,您不需要使用setUpBeforeClass,因为它会为整个套件填充DB,因此会产生测试依赖性的风险,而单元测试必须是独立的。请改用setUptearDown方法。现在到了这一点:你说你只想测试那个响应是代码200.为什么你只想在你的模型中模拟预期的响应时,首先想要填充整个数据库?