assertwell / phpunit-global-state
用于测试依赖全局状态的 PHPUnit 应用程序的工具
v0.2.2
2022-09-05 18:19 UTC
Requires
- php: >=5.6
Requires (Dev)
Suggests
- stevegrunwell/runkit7-installer: Streamline installation of Runkit7
This package is auto-updated.
Last update: 2024-09-05 22:29:33 UTC
README
此库提供了一些特质,旨在帮助测试依赖全局状态的应用程序。
安装
$ composer require --dev assertwell/phpunit-global-state
安装后,将所需的特质添加到您的 PHPUnit 测试类中
<?php namespace Tests; use AssertWell\PHPUnitGlobalState\EnvironmentVariables; use PHPUnit\Framework\TestCase; class MyTestClass extends TestCase { use EnvironmentVariables; // Your test logic goes here. }
Runkit 简介
一些特质将依赖于 Runkit7,PHP runkit 的移植版,用于在 PHP 7.x 中运行时重写代码(即“猴子补丁”)。
例如,一旦定义了 PHP 常量,它通常将具有该值,直到 PHP 进程结束。在正常情况下,这是很好的:它防止值被意外覆盖和/或篡改。
然而,当涉及到测试时,常量可能会变得有点麻烦;因为 PHPUnit 将在同一个进程中运行多个测试,一个较早测试中定义的常量可能会在较后测试中产生意外的副作用。
在某些情况下,可以通过 告诉 PHPUnit 在单独的进程中运行给定的测试 来减轻这种情况,但一些应用程序(例如 WordPress)在独立运行时可能会以非常惊人的方式崩溃。
Runkit 允许我们在运行时重新定义常量、函数、类等,从而绕过这个问题
define('SOME_CONSTANT', 'some value'); var_dump(SOME_CONSTANT) #=> string(10) "some value" // Now, re-define the constant. runkit7_constant_redefine('SOME_CONSTANT', 'some other value'); var_dump(SOME_CONSTANT) #=> string(16) "some other value"
当然,我们可能希望重新定义常量的原始值在测试完成后恢复,这就是 PHPUnit Global State 的作用所在:PHPUnit Global State 中定义的特质旨在确保这些更改在每次测试结束时自动重置。
可用的特质
此库提供了一些特质,基于可能需要操作的全球状态类型。
贡献
如果您有兴趣为此库做出贡献,请查阅我们的贡献指南。