talkinnl/dont-leak

安全清理所有自己的测试属性,防止PHPUnit内存泄漏

v1.0.1 2024-04-07 07:17 UTC

This package is auto-updated.

Last update: 2024-09-12 13:53:33 UTC


README

PHP Composer and unittest

已存档,不再需要。

此包不再需要,因为PHPUnit现在在运行期间会销毁TestCase实例。

PHPUnit在整个运行期间都会保留所有测试实例在内存中。这会导致使用的内存持续增加,除非你在tearDown()期间清理所有属性。

毫无疑问,你最终会忘记这个繁琐的任务。

安装

composer require --dev talkinnl/dont-leak

使用方法

在你的测试类中,将此作为tearDown()的最后一行添加。

也许你希望总是使用一个公共的父类,这样你就永远不会忘记。

    protected function tearDown(): void
    {
        // Start with some of your cleanups which are still needed.
        // Maybe removing files made during the test etc
        
        // Always call your parents; they might get worried. :)
        parent::tearDown();
        
        // Unset any properties, prevent memory leaks.
        DontLeak::freeOwnProperties($this);
    }

它做了什么?

DontLeak::freeOwnProperites($object)取消设置给定$object的自身作用域中可访问的所有属性,以及父对象的所有私有属性。

PHPUnit定义的属性将不会被修改。

下一步是什么

我真的希望这个包因为PHPUnit的改变而变得过时。

请阅读,也许可以投票 --> sebastianbergmann/phpunit#4705

致谢

Stack Overflow、Reddit、Github等网站上散布着许多使用反射来清理tearDown的建议。

实现受到了https://gist.github.com/malarzm/e8c6141b510708e52c8535d2a13cd613的启发,该实现取消设置而不是赋值null,并清除安全父对象的私有属性。