zhukovsergei / phpunit-accelerator
PHPUnit加速器
6.0.0
2024-08-06 14:26 UTC
Requires
- php: >=8.0
- phpunit/phpunit: >=8.0
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>