在我的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);
}
}
答案 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,因此会产生测试依赖性的风险,而单元测试必须是独立的。请改用setUp
和tearDown
方法。现在到了这一点:你说你只想测试那个响应是代码200.为什么你只想在你的模型中模拟预期的响应时,首先想要填充整个数据库?