robier/tests-ignore-final

模拟最终类

dev-master 2022-06-21 19:31 UTC

This package is auto-updated.

Last update: 2024-09-22 00:30:50 UTC


README

这个库允许您模拟签名中包含 final 关键字的类。这是通过挂钩自动加载过程并在运行时更改类的源代码来实现的。

这个库受到了 dg/bypass-finals 库的启发。我想有相同的功能,但采用不同的方法。我希望这种不同的方法不会像 dg/bypass-finals 那样存在感染问题。

用法

假设您有一个想要模拟的类

<?php
# ./FooBar.php
final class FooBar {

}

在您的测试中,您只需要做这件事

<?php

use PHPUnit\Framework\TestCase;
use Robier\Tests\IgnoreFinal;

class FooBarTest extends TestCase
{
    public function testSomething(): void
    {
        IgnoreFinal::composer(FooBar::class);
    }
}

IgnoreFinal 将找到我们想要模拟的类的源代码,并将从源代码中移除所有 final 关键字,然后加载修改后的源代码而不是真实的源代码。

测试

首先运行 docker/build 构建容器,然后运行 docker/run composer run test 执行所有测试。

贡献

欢迎贡献!