Problema
Cuando emplea PHPUnit versión 11 o más reciente para gestionar y ejecutar sus pruebas unitarias, y tiene instalado y habilitado el agente PHP New Relic, ejecutar el script phpunit (el ejecutor de pruebas de la línea de comandos PHPUnit) hará que consuma toda la memoria disponible del sistema antes de ejecutar realmente cualquier prueba.
Solución
Para evitar errores de falta de memoria, debe explicitly disable el agente configurando newrelic.enabled en false. Puedes desactivarlo mientras usas phpunit de esta manera:
$php -d newrelic.enabled=false vendor/bin/phpunit tests/Por ejemplo, para ejecutar un archivo de prueba específico:
$php -d newrelic.enabled=false vendor/bin/phpunit tests/Unit/ExampleTest.phpImportante
Esta solución alternativa deshabilita toda la instrumentación de New Relic mientras se ejecutan pruebas unitarias, lo que significa que no se recopilarán datos de APM durante la ejecución de la prueba.
Como alternativa, puede deshabilitar el agente en su archivo de configuración php.ini si necesita esta configuración de forma permanente para su entorno de desarrollo:
newrelic.enabled = falseCausa
La razón de esta incompatibilidad es el nuevo código que se agregó en PHPUnit 11.x: Volver a aplicar "Verificar y restaurar controladores globales de errores/excepciones" · sebastianbergmann/phpunit@0214cf8. Este nuevo código recupera la lista de controladores de excepciones activos empleando un método que requiere extraer cada controlador de excepciones de la stack de controladores de excepciones. Sin embargo, el agente PHP New Relic instala su propio controlador de excepciones de forma predeterminada y evita que se elimine de la stack de controladores de excepciones. El agente detecta cuando se elimina su controlador de excepciones y lo vuelve a registrar inmediatamente. Esto provoca un bucle infinito en el script phpunit : PHPUnit nunca puede terminar de sacar los controladores de la stack porque el agente PHP New Relic vuelve a registrar continuamente su controlador.