Problema
Quando você usa o PHPUnit versão 11 ou mais recente para gerenciar e executar seus testes de unidade e tem o agente PHP New Relic instalado e ativado, a execução do script phpunit (o executor de testes de linha de comando do PHPUnit) fará com que ele consuma toda a memória disponível do sistema antes de realmente executar qualquer teste.
Solução
Para evitar erros de falta de memória, você deve explicitly disable o agente definindo newrelic.enabled para false. Você pode desativá-lo ao usar phpunit desta forma:
$php -d newrelic.enabled=false vendor/bin/phpunit tests/Por exemplo, para executar um arquivo de teste específico:
$php -d newrelic.enabled=false vendor/bin/phpunit tests/Unit/ExampleTest.phpImportante
Essa solução alternativa desativa toda a instrumentação do New Relic durante a execução de testes unitários, o que significa que nenhum dado de APM será coletado durante a execução dos testes.
Alternativamente, você pode desativar o agente no seu arquivo de configuração php.ini se precisar dessa configuração permanentemente para o seu ambiente de desenvolvimento:
newrelic.enabled = falseCausa
O motivo dessa incompatibilidade é um novo código que foi adicionado no PHPUnit 11.x: Reaplicar "Verificar e restaurar manipuladores globais de erro/exceção" · sebastianbergmann/phpunit@0214cf8. Este novo código recupera a lista de manipuladores de exceção ativos usando um método que requer a remoção de cada manipulador de exceção da stack de manipuladores de exceção. No entanto, o agente PHP New Relic instala seu próprio manipulador de exceções por padrão e impede que ele seja removido da stack de manipuladores de exceções. O agente detecta quando seu manipulador de exceções está sendo removido e o registra novamente imediatamente. Isso causa um loop infinito no script phpunit : PHPUnit nunca consegue terminar de remover os manipuladores da stack porque o agente PHP New Relic registra continuamente seu manipulador novamente!