phpunit memory_limit参数不适用


phpunit memory_limit parameter does not apply

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

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

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

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

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

您已经在phpunit错误跟踪器中打开了一个错误,但我在这里寻找更详细的答案

复制以显示其工作原理:

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

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

基本上;在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"/>
        ...