首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用phpunit为特定的测试套件注入env变量?

问如何使用phpunit为特定的测试套件注入env变量?
EN

Stack Overflow用户
提问于 2016-02-12 18:49:23
回答 3查看 2.6K关注 0票数 11

在phpunit.xml中,可以定义环境变量:

代码语言:javascript
复制
<php>
    <env name="ENVIRONMENT" value="test"/>
    <env name="FOO" value="BAR"/>
</php>

现在,我希望有多个测试套件,而不是只有一个。我希望每个FOO都有不同的值,所以我想我可以这样做:

代码语言:javascript
复制
<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测试套件中?

EN

回答 3

Stack Overflow用户

发布于 2019-04-02 18:06:16

您可以使用包phpunit-globals,它允许您修改特定测试类或方法的$_ENV (和$_SERVER)变量。

使用以下命令将其作为开发依赖项安装:

代码语言:javascript
复制
composer require --dev zalas/phpunit-globals

之后,您可以执行以下操作:

代码语言:javascript
复制
/**
 * @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']);
    }
}
票数 3
EN

Stack Overflow用户

发布于 2016-02-12 19:49:40

phpunit.xml中定义的环境变量是默认值。您也可以从shell传递它们:

代码语言:javascript
复制
FOO=bar phpunit

这对您没有多大帮助,因为您需要单独运行测试套件,并将环境变量传递给每次运行。

我认为一个好的选择是为每个测试套件(FOO_FIRST,FOO_SECOND等)不同地调用这些变量。

票数 2
EN

Stack Overflow用户

发布于 2020-06-04 03:49:50

这是一个老问题,但是使用当前版本的PHPUnit (8+),您可以在测试中设置环境变量而不会出现问题。因此,您可以使用一个测试套件,为不同的环境提供相同的测试和数据提供程序,而不是让多个测试套件具有相同的测试和不同的环境。

代码语言:javascript
复制
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();
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35360665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档