Неустранимая ошибка PHPUnit: допустимый объем памяти исчерпан
Когда я запускаю свои тесты, PHPUnit 8 аварийно завершает работу и генерирует фатальную ошибку: допустимый объем памяти x байтов исчерпан. Я думаю, что он падает только при сбое некоторых тестов.
Когда я впервые использовал его вчера, я установил 2 очень простых теста, сравнивающих 2 строки. Все работало нормально, когда оба теста прошли. Когда я сознательно позволил 1 тесту провалиться, он все еще работал Когда оба теста провалились, я получил указанную ошибку.
я узнал что --process-isolation
при выполнении PHPUnit 8 эта проблема решается, однако теперь выполнение тестов занимает невероятное количество времени (5 минут для примерно 30 простых сравнений строк), увеличиваясь с каждым новым тестом, что, очевидно, невозможно в долгосрочной перспективе.
Кроме того, увеличение разрешенной памяти на самом деле не должно быть решением этой проблемы, потому что а) это, вероятно, будет только временное исправление и б) не может быть, чтобы PHPUnit 8 использовал всю доступную память только для двух простых неудачных тестов.
Я уже удалил и переустановил PHPUnit 8, который никак не повлиял на проблему.
Может быть важно: я установил PHPUnit с Composer.
Обновление: хорошо, я только что попробовал это на машине моего коллеги, и она прекрасно работала там с той же кодовой базой. Это становится странным...
Вот код, который я использую для проверки моего метода:
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 не использовать все мои ресурсы и нормально функционировать?
Изменить: На основе комментария Якуба Заласа, вот реализация myFunction():
public static function myFunction(string $dirtyString): string
{
$regex = '/\s+| +/';
$dirtyString = trim($dirtyString, $regex);
$cleanedString = preg_replace($regex, ' ', $dirtyString);
return $cleanedString;
}
0 ответов
Я знаю, что это старый вопрос, но я только что столкнулся с той же проблемой с ужасной фатальной ошибкой "память исчерпана" при запуске PHP Unit с Symfony phpunit-bridge. На мой взгляд, добавление флага "--process-olated" запускало тесты. Исходя из предыдущего опыта, я обнаружил, что это часто смягчает модульные тесты PHP, которые вызывают эту ошибку памяти.
В частности, для Symfony команда:
$ ./vendor/bin/simple-phpunit --process-isolation