当尝试使用phpdbg运行感染测试时,我不断收到内存耗尽错误。我尝试设置-d memory_limit
,但似乎被忽略了。
下面是一些示例输出:
$ phpdbg -qrr -d memory_limit=1G vendor/bin/infection
You are running Infection with phpdbg enabled.
____ ____ __ _
/ _/___ / __/__ _____/ /_(_)___ ____
/ // __ \/ /_/ _ \/ ___/ __/ / __ \/ __ \
_/ // / / / __/ __/ /__/ /_/ / /_/ / / / /
/___/_/ /_/_/ \___/\___/\__/_/\____/_/ /_/
Running initial test suite...
PHPUnit version: 7.5.11
4 [============================] 1 sec
[ERROR] Project tests must be in a passing state before running Infection.
Infection runs the test suite in a RANDOM order. Make sure your tests do not have hidden dependencies.
You can add these attributes to `phpunit.xml` to check it: <phpunit executionOrder="random"
resolveDependencies="true" ...
If you don't want to let Infection run tests in a random order, set the `executionOrder` to some value, for
example <phpunit executionOrder="default"
Check the executed command to identify the problem: '/usr/local/Cellar/php@7.2/7.2.18/bin/phpdbg' '-qrr'
'~/Project/vendor/phpunit/phpunit/phpunit' '--configuration'
'/var/folders/05/qbcbz9cn08jdty7r35dwkgdm0000gn/T/infection/phpunitConfiguration.initial.infection.xml'
PHPUnit reported an exit code of 255.
Refer to the PHPUnit's output below:
STDOUT:
PHPUnit 7.5.11 by Sebastian Bergmann and contributors.
Random seed: 1560152243
[PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65536 bytes) in
~/Project/vendor/sebastian/exporter/src/Exporter.php on line
219]
[PHP Stack trace:]
[PHP 1. {main}()
~/Project/vendor/phpunit/phpunit/phpunit:0]
带有我的fection.json.dist文件:
{
"timeout": 10,
"source": {
"directories": [
"src"
]
},
"logs": {
"text": "infection.log"
},
"mutators": {
"@default": true
}
}
答案 0 :(得分:0)
您要在开发环境的memory_limit=-1
配置文件中使用php.ini
。
答案 1 :(得分:0)
您可以事先收集承保范围,然后将其提供给感染。
vendor/bin/phpunit --coverage-xml=build/logs/coverage-xml \
--log-junit=build/logs/phpunit.junit.xml \
--coverage-clover=build/logs/clover.xml
vendor/bin/infection --coverage=build/logs --show-mutations
由于您不会同时运行Infection和PHPUnit,因此可以完全避免内存限制问题。如果没有,那么运行具有更高内存限制的任何程序都应该像以下操作一样简单:
php -d memory_limit=-1 vendor/bin/...
这样,您还可以在修复测试后重新运行感染,以查看是否杀死了一个突变而无需重新收集覆盖率数据。