在phpunit.xml中,可以定义环境变量:
<php>
<env name="ENVIRONMENT" value="test"/>
<env name="FOO" value="BAR"/>
</php>现在,我希望有多个测试套件,而不是只有一个。我希望每个FOO都有不同的值,所以我想我可以这样做:
<testsuites>
<testsuite name="First">
<directory>unit</directory>
<directory>Functional</directory>
<php>
<env name="FOO" value="NARF"/>
</php>
</testsuite>
<testsuite name="Second">
<directory>unit</directory>
<directory>Functional</directory>
<php>
<env name="FOO" value="NARF"/>
</php>
</testsuite>
</testsuites>It doesn't seem possible to nest php inside testsuite block。因此,我目前在为某个测试套件注入特定变量时遇到了困难。
我看到的唯一一个明确的选择是为每种情况定义多个phpunit.xml文件,但这将导致我希望避免的大量代码重复。
有没有其他方法可以将env变量注入到phpunit测试套件中?
发布于 2019-04-02 18:06:16
您可以使用包phpunit-globals,它允许您修改特定测试类或方法的$_ENV (和$_SERVER)变量。
使用以下命令将其作为开发依赖项安装:
composer require --dev zalas/phpunit-globals之后,您可以执行以下操作:
/**
* @env FOO=bar
*/
class ExampleTest extends TestCase
{
/**
* @env APP_ENV=foo
*/
public function test_global_variables()
{
$this->assertSame('bar', $_ENV['FOO']);
$this->assertSame('foo', $_ENV['APP_ENV']);
}
}发布于 2016-02-12 19:49:40
phpunit.xml中定义的环境变量是默认值。您也可以从shell传递它们:
FOO=bar phpunit这对您没有多大帮助,因为您需要单独运行测试套件,并将环境变量传递给每次运行。
我认为一个好的选择是为每个测试套件(FOO_FIRST,FOO_SECOND等)不同地调用这些变量。
发布于 2020-06-04 03:49:50
这是一个老问题,但是使用当前版本的PHPUnit (8+),您可以在测试中设置环境变量而不会出现问题。因此,您可以使用一个测试套件,为不同的环境提供相同的测试和数据提供程序,而不是让多个测试套件具有相同的测试和不同的环境。
class ExampleTest extends TestCase
public function envValueProvider(): array
{
return [
[
'foo',
],
[
'bar',
],
];
}
/**
* @dataProvider envValueProvider
*/
public function testSomeCode(string $value): void
{
putenv('FOO=' . $value);
somecode();
self::assertSomething();
}https://stackoverflow.com/questions/35360665
复制相似问题