assertwell/phpunit-global-state

用于测试依赖全局状态的 PHPUnit 应用程序的工具

v0.2.2 2022-09-05 18:19 UTC

This package is auto-updated.

Last update: 2024-09-05 22:29:33 UTC


README

此库提供了一些特质,旨在帮助测试依赖全局状态的应用程序。

安装

您可以通过 Composer 安装此包

$ 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 中定义的特质旨在确保这些更改在每次测试结束时自动重置。

可用的特质

此库提供了一些特质,基于可能需要操作的全球状态类型。

贡献

如果您有兴趣为此库做出贡献,请查阅我们的贡献指南