我刚刚在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吗?
答案 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