内存在Laravel单元测试中耗尽

时间:2017-05-23 15:24:18

标签: php laravel unit-testing out-of-memory

我为我的控制器编写了单元测试。我的班级是

class ApiControllerTest extends TestCase

它包含像这样的测试方法

public function testAgeDistribution()
    {
        $response = $this->action(...,
            ['datasetName'=>'AgeDistribution',
              'min_longitude'=>-80.60, 'max_longitude'=>-78.60,
                'min_latitude'=>43.20, 'max_latitude'=>44,
                'zoom'=>12
                ]);



        $this->assertResponseOk();

        $json = json_decode($response->content());

        $this->checkMainThings($json, 'AgeDistribution', 'Population', 7, 100, 7);
    }

所有方法都相似,但参数和检查不同。

在处理函数的开头我有一行

$start_memory = memory_get_usage();

我看到(在调试器中)每个新测试都有越来越多的内存使用。

换句话说,测试之间不会释放内存。

如何释放PHP中的内存或我在测试方法中可能出现的错误?

1 个答案:

答案 0 :(得分:2)

PHPUnit不会自行清理。一种选择是扩展TestCase并释放tearDown

中的内存
abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
{
    public function tearDown()
    {
        parent::tearDown();

        $refl = new ReflectionObject($this);
            foreach ($refl->getProperties() as $prop) {
            if (!$prop->isStatic() && 0 !== strpos($prop->getDeclaringClass()->getName(), 'PHPUnit_')) {
                $prop->setAccessible(true);
                $prop->setValue($this, null);
            }
        }
    }
}