Doctrine Symfony 4.1内核测试用例存储库连接异常

Doctrine Symfony 4.1内核测试用例存储库连接异常,doctrine,phpunit,symfony4,connectionexception,Doctrine,Phpunit,Symfony4,Connectionexception,我正在跟随symfony docs()尝试根据MySQL数据库测试我的存储库类。 相关代码部分如下所示: class ProductRepositoryTest extends KernelTestCase { /** * @var \Doctrine\ORM\EntityManager */ private $entityManager; /** * {@inheritDoc} */ protected function

我正在跟随symfony docs()尝试根据MySQL数据库测试我的存储库类。 相关代码部分如下所示:

class ProductRepositoryTest extends KernelTestCase
{
    /**
     * @var \Doctrine\ORM\EntityManager
     */
    private $entityManager;

    /**
     * {@inheritDoc}
     */
    protected function setUp()
    {
        $kernel = self::bootKernel();

        $this->entityManager = $kernel->getContainer()
            ->get('doctrine')
            ->getManager();
    }

    public function testSearchByCategoryName()
    {
        $products = $this->entityManager
            ->getRepository(Product::class)
            ->searchByCategoryName('foo')
        ;

        $this->assertCount(1, $products);
    }

    /**
     * {@inheritDoc}
     */
    protected function tearDown()
    {
        parent::tearDown();

        $this->entityManager->close();
        $this->entityManager = null; // avoid memory leaks
    }
}
当我使用PhpUnit执行testclass时,我得到一个条令\DBAL\Exception\ConnectionException,并显示以下消息:“驱动程序中发生异常:用户'root'@'localhost'(使用密码:否)的SQLSTATE[HY000][1045]访问被拒绝”

我将数据库连接数据存储在.env文件的database_URL中,执行:bin/console原则:migrations:migrate时,连接工作正常

但是这个配置似乎没有用于测试(因为在.env文件中“NO”不是我的密码)。我是否必须将连接配置存储在另一个文件中进行测试?如果是,我必须在哪里存储配置,以便在我的测试用例中使用它


提前感谢您的帮助

文件
.env
仅在
dev
环境中使用。如果您在
prod
test
中,它甚至不被读取:。这在文档的某些部分很清楚,但在其他一些部分则不那么清楚,这可能会让人困惑


在您的情况下,您可以检查
config
文件夹,更具体地说可能是在
config/packages/doctrine.yaml
config/packages/parameters.yaml
下,并查看
数据库URL
是如何使用的(如果存在)。从那里,您可以在特定于
test
环境的配置文件中硬编码该URL(例如,在
config/packages
下创建一个
test
子文件夹),或者您可以使用
APP\u ENV=…&&bin/phpunit…

以下是第一个场景中的解决方案:

# config/packages/test/doctrine.yaml
doctrine:
  dbal:
    url: 'mysql://db_user:db_password@127.0.0.1:3306/db_name'

我刚试过,效果很好,非常感谢!!:)