phpunit memory_limit参数不适用

时间:2012-01-10 20:31:24

标签: php macos phpunit xdebug memory-limit

我刚刚在mac osx 10.7中通过pear安装了phpunit,除了内存限制错误(为报告启用xdebug)外,一切正常。

我尝试将-d memory_limit=512M参数添加到phpunit但它没有应用,因为在第一个错误中,我添加了var_dump(ini_get('memory_limit')); exit;并且它打印了字符串(3)“32M”

那么,为什么它没有应用呢?

除此之外,如果我跑

php -d memory_limit=256M -r "echo ini_get('memory_limit');"

它回应“256M”

phpunit可能没有执行相同的php吗?

3 个答案:

答案 0 :(得分:28)

是的,您可以使用phpunit -d设置每个可以使用ini_set设置的php选项。

You already opened a bug over in the phpunit bug tracker但是我想在这里找到更详细的答案

重现以显示它的工作原理:

echo "<?php var_dump(ini_get('memory_limit')); " > foo.php

phpunit -d memory_limit=12M --bootstrap foo.php 

产地:

string(3) "12M"
PHPUnit 3.6.5 by Sebastian Bergmann.

但phpunit仅在第一次测试运行之前应用此选项一次!

因此,您的代码可能会将内存限制更改回32M,这是phpunit无法“修复”的内容。

phpunit.xml文件中设置内存限制也是如此。

答案 1 :(得分:4)

对于那些到达此线程并需要获取phpunit.xml配置文件的配置的人:

<php>
  <ini name="memory_limit" value="512M" />
</php>

有关“设置PHP INI设置,常量和全局变量”部分的更多信息,请参见 https://phpunit.de/manual/6.5/en/appendixes.configuration.html

答案 2 :(得分:3)

如果您不介意测试的速度,会发现this thread非常有用,因为它可以更好地处理应用程序的内存。

基本上;在您的phpunit.xml的{​​{1}}标签下,将<phpunit>设置为processIsolation,即

true

或者,

您可以完全禁用<?xml version="1.0" encoding="UTF-8"?> <phpunit ... processIsolation="true" ... > 标签下的内存限制,将<php>设置为memory_limit,即

-1