zalas/phpunit-globals

允许在PHPUnit测试用例中使用属性定义全局变量。

资助包维护!
jakzal

v3.3.0 2024-05-20 09:51 UTC

README

允许在PHPUnit测试用例中使用属性定义全局变量。

Build

支持属性

  • #[Env] 用于 $_ENV
  • #[Server] 用于 $_SERVER
  • #[Putenv] 用于 putenv()

支持注解

  • @env@unset-env 用于 $_ENV
  • @server@unset-server 用于 $_SERVER
  • @putenv@unset-getenv 用于 putenv()

自v3.1.0以来,注解已被弃用,并在v3.4.0中删除。最新注解支持计划在PHPUnit 12发布时删除。注解支持已完成,因此如果您计划使用它们,请继续使用此包的v3.3版本。

全局变量在每个测试用例执行之前设置,并在每个测试用例完成后恢复到原始状态。对 putenv()/getenv() 调用也适用。

安装

Composer

composer require --dev zalas/phpunit-globals

Phar

此扩展也以PHAR的形式分发,可以从最新的Github发布下载。

将扩展放在您的PHPUnit扩展目录中。请记住,在您的 phpunit.xml 中使用 extensionsDirectory 属性指导PHPUnit加载扩展。

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file://./vendor/phpunit/phpunit/phpunit.xsd"
         extensionsDirectory="tools/phpunit.d"
>
</phpunit>

使用方法

在您的PHPUnit配置中启用全局属性扩展

<?xml version="1.0" encoding="UTF-8"?>
<phpunit ...>

    <!-- ... -->

    <extensions>
        <bootstrap class="Zalas\PHPUnit\Globals\AttributeExtension" />
    </extensions>
</phpunit>

如果您使用的是PHP 8.1之前的版本,则可以使用 AnnotationExtension

请确保在可能依赖于全局变量的任何其他扩展之前注册 AttributeExtension

现在可以在属性中定义全局变量

use PHPUnit\Framework\TestCase;
use Zalas\PHPUnit\Globals\Attribute\Env;
use Zalas\PHPUnit\Globals\Attribute\Server;
use Zalas\PHPUnit\Globals\Attribute\Putenv;

 #[Env('FOO', 'bar')]
class ExampleTest extends TestCase
{
    #[Env('APP_ENV', 'foo')]
    #[Env('APP_DEBUG', '0')]
    #[Server('APP_ENV', 'bar')]
    #[Server('APP_DEBUG', '1')]
    #[Putenv('APP_HOST', 'localhost')]
    public function test_global_variables()
    {
        $this->assertSame('bar', $_ENV['FOO']);
        $this->assertSame('foo', $_ENV['APP_ENV']);
        $this->assertSame('0', $_ENV['APP_DEBUG']);
        $this->assertSame('bar', $_SERVER['APP_ENV']);
        $this->assertSame('1', $_SERVER['APP_DEBUG']);
        $this->assertSame('localhost', \getenv('APP_HOST'));
    }
}

也可以使用 unset 标记属性,使其不在任何全局变量中存在

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{
    #[Env('APP_ENV', unset: true)]
    #[Server('APP_DEBUG', unset: true)]
    #[Putenv('APP_HOST', unset: true)]
    public function test_global_variables()
    {
        $this->assertArrayNotHasKey('APP_ENV', $_ENV);
        $this->assertArrayNotHasKey('APP_DEBUG', $_SERVER);
        $this->assertArrayNotHasKey('APP_HOST', \getenv());
    }
}

更新到PHPUnit 10

当从之前的版本更新,该版本专用于与PHPUnit 9一起工作时,请用以下内容替换 phpunit.xml 中的扩展注册:

    <extensions>
        <extension class="Zalas\PHPUnit\Globals\AttributeExtension" />
    </extensions>

替换为

    <extensions>
        <bootstrap class="Zalas\PHPUnit\Globals\AttributeExtension" />
    </extensions>

贡献

请阅读贡献指南,了解如何为此项目做出贡献。请注意,该项目遵循贡献者行为准则。通过参与此项目,您同意遵守其条款。