2010-10-01 14 views
19

utilizo PHPUnit para pruebas unitarias error fatal, pero cuando se desencadena un error grave , el guión muere y no tengo salida PHPUnit correcta.PHPUnit: manejo

Me gustaría que la salida PHPUnit se mantenga correctamente formateada, ya que se lee con un plugin para Eclipse. En realidad, el error fatal detiene PHPUnit y en Eclipse el complemento no puede interpretar nada (porque el script PHPUnit tenía un error, en lugar de manejarlo).

Gracias

+0

¿qué tipo de errores fatales? si están relacionados con la sintaxis o la semántica, no tienes suerte. – stillstanding

Respuesta

26

Debe utilizar las funciones de aislamiento de proceso de PHPUnit: comience cada conjunto de pruebas en un nuevo proceso.

phpunit --process-isolation ... 

Esta es la única manera de asegurarse de que los errores fatales no interrumpan la salida de phpunit.

Tiempo de ejecución

aislamiento de procesos multiplica su tiempo de ejecución de prueba, porque para cada prueba única, se inicia una nueva instancia de PHP, el sistema de arranque se ejecuta etc.

Para modificar esta situación, es posible elija ejecutar casos de prueba completos en un proceso separado (@runTestsInSeparateProcesses), o solo los únicos que se sabe que son fatales a veces (@runInSeparateProcess).

+1

Sea sincero, aunque aumenta considerablemente la ejecución de la prueba. Pasó de 4 segundos a 90 segundos aquí con solo 150 pruebas en una aplicación pequeña. – stefgosselin

+0

Puede, por ejemplo, desactivar "copias de seguridad globales" para obtener mejores velocidades de prueba. También depende de la velocidad de tu archivo bootstrap. – cweiske

+0

--process-isolation puede causar daños a los cerebros cuando intento ejecutar más de 7000 pruebas, utilicé 'register_shutdown_function()' en --bootstrap y --printer para la integración de TeamCity. Compartiré fuentes más adelante este mes. –

2

set_error_handler() no le ayudará allí. Puede detectar errores fatales utilizando register_shutdown_function()

+0

Como dije, me gustaría tener un error PHPUnit (quiero que la salida de phpunit no se estropee). He extendido la descripción de la pregunta. –