zalas / phpunit-globals
允许在PHPUnit测试用例中使用属性定义全局变量。
v3.3.0
2024-05-20 09:51 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- phpunit/phpunit: ^10.0 || ^11.0
This package is auto-updated.
Last update: 2024-09-20 10:42:25 UTC
README
允许在PHPUnit测试用例中使用属性定义全局变量。
支持属性
#[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>