未找到环境变量:“0”;数据库“URL”;运行phpunit时

未找到环境变量:“0”;数据库“URL”;运行phpunit时,php,symfony,phpunit,environment-variables,Php,Symfony,Phpunit,Environment Variables,我实施了一个简单的测试,以检查我的应用程序中是否显示页面: namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class MyControllerTest extends WebTestCase { public function testMyAction() { $client = static::createClient();

我实施了一个简单的测试,以检查我的应用程序中是否显示页面:

namespace App\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class MyControllerTest extends WebTestCase
{
    public function testMyAction()
    {
        $client = static::createClient();
        $client->request('GET', '/');
        $this->assertEquals(200, $client->getResponse()->getStatusCode());
    }
}
当我运行php vendor/phpunit/phpunit/phpunit时,会收到以下错误消息:

1) App\Tests\Controller\MyControllerTest::testMyAction
Symfony\Component\DependencyInjection\Exception\EnvNotFoundException:
Environment variable not found: "DATABASE_URL".

然而,该变量在
.env
中可用。我怎样才能解决这个问题

我找到了解决方案,它必须在
部分的
phpunit.xml.dist
中定义。

您是否使用docker运行测试?这是一个明确的信号,表明您在某个地方引入了紧密耦合。单元测试应该在与系统其余部分完全隔离的情况下测试单元。如果您的单元测试在没有特定环境变量集的情况下无法运行,那么这意味着它不是真正孤立地测试单元。
static::createClient()
是问题所在的主要候选者,还应注意,通常情况下,您并不打算对控制器进行单元测试。它们并不意味着包含任何有意义的业务逻辑,这些逻辑首先需要测试,而只是作为粘合逻辑。如果您觉得控制器测试非常复杂,需要进行单元测试,这可能是一种被称为“fat控制器”的反模式的味道,其中控制器包含真正属于其他地方的业务逻辑。我没有使用docker。当您在终端中执行
env
时,会出现变量
“DATABASE\u URL”