zhukovsergei/phpunit-accelerator

PHPUnit加速器

6.0.0 2024-08-06 14:26 UTC

This package is auto-updated.

Last update: 2024-09-06 14:41:43 UTC


README

我发现PHPUnit调试内存非常困难,因为它本身在开始任何测试之前会保留很多对象在内存中,因此初始内存会根据可用的测试数量而跳变——它为每个测试创建一个新的测试类实例,所以拥有1k个测试声明/函数的UserTest会在实际开始处理之前产生1k个UserTest类实例,我认为这更多的是来自PHPUnit本身的不效率,测试越多,起始内存就越高。

受到Kris Wallsmith的更快PHPUnit文章的启发,我们创建了一个PHPUnit测试监听器,通过释放内存来加快PHPUnit测试速度,大约提高20%。

安装

要安装此库,请运行以下命令,您将获得最新版本

composer require zhukovsergei/phpunit-accelerator --dev

使用方法

只需将其添加到您的phpunit.xml配置中

<phpunit>
    <listeners>
        <listener class="\MyBuilder\PhpunitAccelerator\TestListener"/>
    </listeners>
</phpunit>

忽略测试

有时需要忽略特定的测试,在这些测试中,释放它们的属性是不希望发生的。为此,您可以通过实现IgnoreTestPolicy接口来扩展监听器的行为。

例如,如果我们假设想忽略所有测试文件名中包含"Legacy"的测试,我们可以创建一个自定义忽略策略如下

<?php

use MyBuilder\PhpunitAccelerator\IgnoreTestPolicy;

class IgnoreLegacyTestPolicy implements IgnoreTestPolicy {
    public function shouldIgnore(\ReflectionObject $testReflection) {
        return strpos($testReflection->getFilename(), 'Legacy') !== false;
    }
}

然后将其传递到phpunit.xml配置中我们的测试监听器构造函数中

<phpunit>
    <listeners>
        <listener class="\MyBuilder\PhpunitAccelerator\TestListener">
            <arguments>
                <object class="\IgnoreLegacyTestPolicy"/>
            </arguments>
        </listener>
    </listeners>
</phpunit>

MyBuilder创建 - 欢迎查看我们的博客,了解更多关于这个以及其他我们发布的开源项目的信息。