运行测试时,PHPUnit 8崩溃并生成致命错误:允许的内存大小为x字节已用尽。我认为只有在某些测试失败时它才会崩溃。
昨天第一次使用它时,我设置了两个比较两个字符串的非常简单的测试。当两个测试都通过时,所有工作正常。当我故意让1次测试失败时,它仍然有效。当两个测试都失败时,我得到了指定的错误。
我发现--process-isolation
在执行PHPUnit 8时可以解决此问题,但是现在执行测试需要花费大量时间(大约30分钟进行简单的字符串比较需要5分钟),并且每次进行新测试时都会增加,从长远来看,这显然是不可行的。
另外,增加允许的内存确实不能解决这个问题,因为a)可能只是临时解决方案,b)PHPUnit 8不可能仅将所有可用内存用于两次简单的失败测试。
我已经卸载并重新安装了PHPUnit 8,这丝毫不影响该问题。
也许很重要:我用Composer安装了PHPUnit。
更新:好的,我只是在同事的机器上对其进行了尝试,并且在相同的代码库下,它的运行情况非常好。真奇怪...
这是我用来测试方法的代码:
class MyClassTest extends TestCase
{
public function myFunctionProvider()
{
// horizontal tab
$ht = "\u{0009}";
...
return [
'descr_1' => [' abc ', 'abc' ],
'descr_2' => ['d e f' , 'd e f'],
'descr_3' => ['ghi' , 'ghi' ],
'descr_4' => [$ht . $ht . 'jkl' . $ht , 'jkl' ],
'descr_5' => ['m' . $ht . $ht , 'n' . $ht . 'o' , 'm n o' ],
...
];
}
/**
* @dataProvider myFunctionProvider
*/
public function testMyFunction(string $dirtyString, string $expectedResult): void
{
$actualResult = MyClass::myFunction($dirtyString);
$this->assertEquals(
$expectedResult,
$actualResult
);
}
}
如何使PHPUnit不能占用我所有的资源并不能正常运行?
编辑: 根据Jakub Zalas的评论,这是myFunction()的实现:
public static function myFunction(string $dirtyString): string
{
$regex = '/\s+| +/';
$dirtyString = trim($dirtyString, $regex);
$cleanedString = preg_replace($regex, ' ', $dirtyString);
return $cleanedString;
}
答案 0 :(得分:0)
我知道这是一个老问题,但是我遇到了同样的问题,因为可怕的“内存耗尽”致命错误在使用Symfony phpunit-bridge运行PHP Unit时发生了。对我来说,添加“ --process-isolation”标志可以很好地运行测试。从以前的经验来看,我发现这通常可以缓解引发该内存错误的PHP单元测试。
对于Symfony来说,该命令特别是:
$ ./vendor/bin/simple-phpunit --process-isolation