phpunit memory_limit参数不适用

jer*_*kan 16 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');"
Run Code Online (Sandbox Code Playgroud)

它呼应"256M"

是不是phpunit可能没有执行相同的PHP?

edo*_*ian 27

是的,你可以用每一个PHP选项设置phpunit -d可以与设置ini_set.

你已经在phpunit bug跟踪器中打开了一个bug,但是我想在这里找到更详细的答案

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

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

phpunit -d memory_limit=12M --bootstrap foo.php 
Run Code Online (Sandbox Code Playgroud)

生产:

string(3) "12M"
PHPUnit 3.6.5 by Sebastian Bergmann.
Run Code Online (Sandbox Code Playgroud)

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

所以很有可能你的代码在某处改变了内存限制,32M这是phpunit无法"修复"的东西.

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

  • 感谢您提到我的代码当然可以设置限制 (3认同)

ino*_*ino 9

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

<php>
  <ini name="memory_limit" value="512M" />
</php>
Run Code Online (Sandbox Code Playgroud)

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


Kev*_*vin 7

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

基本上; 在您phpunit.xml<phpunit>标签下,将 设置processIsolationtrueie

<?xml version="1.0" encoding="UTF-8"?>
<phpunit 
         ...
         processIsolation="true"
         ... >
Run Code Online (Sandbox Code Playgroud)

或者,

您可以在<php>标签下完全禁用内存限制 ,将其设置memory_limit-1ie

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

Run Code Online (Sandbox Code Playgroud)