Когда я запускаю свои тесты, 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;
}