mysql - 如何确保单元测试 Doctrine 尝试加载到与开发相同的数据库?

标签 mysql unit-testing symfony doctrine

我想在 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: An exception occurred in driver: SQLSTATE[HY000] [1045] Access denied for user 'db_user'@'localhost' (using password: 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 并覆盖配置 ( Customizing Database URL / Environment Variables )

[编辑] @LajosArpad 建议的另一种方法是添加 phpunit.xml.dist:

<env name="DATABASE_URL" value="mysql://db_user4test:db_password4test@host4test:3306/dbname4test" />

参见Changing Database Settings for Functional Tests

关于mysql - 如何确保单元测试 Doctrine 尝试加载到与开发相同的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57963365/

相关文章:

c++ - 带优化的代码覆盖率

html - 使用 html5 和取消按钮的 Symfony2 表单验证

symfony - 服务不存在?交响乐2

php - PDO BindParam 和 BindValue 不起作用

php - 将图像保存在服务器中并链接到数据库 PHP 数据对象 PDO OOP

php - 向mysqli数据库中插入数据

ruby-on-rails-3 - simple_cov : how to include tests of engine to the report?

c++ - 如何在 Visual Studio 10 中生成自定义生成错误

php - yii CDbCriteria 和 join 语句中的子查询

PHP Twig 日期(H :i:s) from seconds