PHPUnit的memory_limit参数不起作用。

29

我刚在 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文件?


1
你尝试过使用 ini_set('memory_limit', '512M') 吗? - afuzzyllama
@afuzzyllama 它可以工作,但我不明白为什么它不能使用命令行。 - jerkan
1
这可能听起来很蠢,但如果您尝试 phpunit -dmemory_limit=512M 会发生什么? - afuzzyllama
PHPUnit 是否接受 -d 参数? - David Harkness
在另一台机器上,它对我起作用了。 - jerkan
3个回答

47

42

你可以使用phpunit -d来设置任何可以使用ini_set设置的php选项。

您已经在phpunit bug跟踪器中打开了一个错误报告,但是我这里将给出更详细的答案。

重现以展示其一般性:

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文件中设置内存限制。

那个例子按照说明正常工作。然而,我在代码中找不到任何“memory_limit”。我将继续调试。谢谢。 - jerkan
3
谢谢您提到我的代码当然可以设置限制。 - Rvanlaak
1
那个,就是那个,救了我的一天... “所以很有可能你的代码在某个地方将内存限制改回了32M,这是phpunit无法“修复”的事情。” - fleuryc

14
如果你不在意测试的速度,可以查看此讨论帖,因为它更好地处理了应用程序的内存问题。基本上,在phpunit.xml文件中,在<phpunit>标签下,将processIsolation设置为true
<?xml version="1.0" encoding="UTF-8"?>
<phpunit 
         ...
         processIsolation="true"
         ... >

另外一种方法是,在 <php> 标签下,将 memory_limit 设置为 -1,从而完全禁用内存限制。

<php>
        ...
        <ini name="memory_limit" value="-1"/>
        ...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接