mysql - 如何确保单元测试原则正试图加载到与 dev 相同的数据库?
问题描述
我想在 Symfony 中进行一些单元测试,并尝试测试已经有效的东西,如下所示:
<?php namespace App\Tests\Api\Controller;
use Symfony\Component\HttpFoundation\Request;
use App\Controller\Admin\ProductAdminController;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
/**
* Class ProductsAdminControllerTest
* @package App\Tests\Api\Controller
*/
class ProductsAdminControllerTest extends WebTestCase
{
protected function setUp()
{
$kernel = static::createKernel();
$kernel->boot();
static::$container = $kernel->getContainer();
/*$this->_em = $kernel->getContainer()->get('doctrine.orm.entity_manager');
$this->_em->beginTransaction();*/
}
public function testSearchProductsEmpty()
{
$request = new Request([], [
"product_name" => ""
]);
$controller = new ProductsAdminController();
$controller->setContainer(static::$container);
$controller->getProducts($request);
//$products = json_decode($controller->getProducts($request));
$this->assertEquals(1, 1);
}
}
当然,这将在我克服当前的问题后进行修改,即无论我做什么,我都会得到错误
Doctrine\DBAL\Exception\ConnectionException:驱动程序中发生异常:SQLSTATE [HY000] [1045] 用户'db_user'@'localhost'的访问被拒绝(使用密码:YES)
当然,我的开发环境连接的数据库具有不同的凭据,我想确保我的单元测试使用相同的凭据。如何做到这一点?
解决方案
如果你想为不同的环境使用不同的连接参数,你可以通过在 config/packages/{env}/doctrine.yaml 中创建文件来覆盖配置
对于测试,您可以创建 config/packages/test/doctrine.yaml
doctrine:
dbal:
# configure these for your database server
url: 'mysql://db_user4test:db_password4test@host4test:3306/dbname4test'
phpunit 将使用此配置。
否则您可以创建一个 .env.test 并覆盖配置(自定义数据库 URL/环境变量)
[编辑]@LajosArpad 建议的另一种方法是添加 phpunit.xml.dist:
<env name="DATABASE_URL" value="mysql://db_user4test:db_password4test@host4test:3306/dbname4test" />
请参阅更改功能测试的数据库设置