2010-08-25 13 views
5

Cuando ocurre un error que el marco PHPUnit no espera que se produzca, la prueba se detiene, y PHP lanza el error, pero no registra PHPUnit que era un error. ¿Cómo me aseguro de que PHPunit lo registre como un error?PHPUnit - Errores

+1

¿Podría ampliar eso? ¿De qué tipo de errores estás hablando? ¿Cuál es el resultado esperado de phpunit, y cuál es el resultado real? – janmoesen

+0

Así que PHPunit tiene Afirmaciones, Fallas y Errores por lo que entiendo. Entonces digamos que hay un error de sintaxis en el código. Una coma extra o punto y coma faltante. Esto causará que una determinada prueba no se ejecute, y la prueba cesará, pero PHPunit no lo reporta como un error, y php generará el error, pero PHPunit no registrará esto. ¿Hay alguna manera de forzar a PHPunit a registrar algo así como un error de sintaxis, en lugar de solo aserciones de código logístico? – Anthony

+0

Puede proporcionar un TestCase ilustrativo para esto, por favor (en serio) – Gordon

Respuesta

5

Descargo de responsabilidad, soy nuevo en PHPUnit y estoy tratando de descubrir todo el 'qué sucede cuando ocurre un error' también.

De PHPUnit's docs:

When the tested code contains PHP syntax errors, the TextUI test runner might exit without printing error information. The standard test suite loader can optionally check the test suite sourcefile for PHP syntax errors, but not sourcefiles included by the test suite sourcefile.

Y la opción:

--syntax-check   Try to check source files for syntax errors. 
+0

Vea mi último comentario a la pregunta original. (Está oculto por defecto.) No parece haber un error de sintaxis PHP; simplemente un error de sintaxis SQL. – janmoesen

+0

@janmoesen Lo sé, pero en los comentarios, el OP también dice: "Digamos que hay un error de sintaxis en el código. Una coma extra o un punto y coma faltante. Esto hará que una determinada prueba no se pueda ejecutar, y la prueba cesará, pero PHPunit no lo reporta como un error, y php generará el error, pero PHPunit no registrará esto ". –

0

lo que el PO está hablando de un error de sintaxis o PHP matará PHPUnit. Los errores fatales de PHP matan al intérprete de PHP (o lo detienen al menos), lo que significa que PHPUnit no puede continuar.

Si realmente quería para evitar este caso se podría añadir algunos de los siguientes bits en un script. Este script asume que el script está en el directorio con sus pruebas (./) y que su árbol de códigos comienza en ../ (configuración similar a una configuración de ZendFramework 1 normal). Ni te molestes con el uso de la cobertura de código con este script, sólo será correcto para la última carrera unittest:

#!/bin/bash 
    for i in $(find ../ -name "*.php"); do 
     msg=`php -l $i` 
     if [ "$?" != "0" ]; then 
      echo $msg; 
     fi 
    done 

    for i in $(find ./ -name "*Test.php"); do 
    echo "Running Test: $i"; 

    phpunit $i 
    done 

HTH.

0

Debería capturar el error utilizando la captura normal de errores de PHP para evitar el bloqueo del sistema operativo, lo que sucede cuando el intérprete de PHP encuentra el error.

pruebas automatizadas deben ser revisados ​​y probados antes de ser comprometido con su corriente principal del desarrollo.

Capturo la salida de PHPUnit (phpunit ...> PHPUnit.log) que luego analizo buscando el estado de PHPUnit (Éxito con Saltado/Incompleto, OK, FALLO, etc ...) y si esto es no encontrado, entonces sé que PHPUnit no se completó, y ocurrió un error. Los resultados del error también se habrán descargado al terminal ya que tengo mi PHP configurado para mostrar los errores.

En un error, simplemente envío este archivo de registro al equipo de desarrollo, o la persona que modificó por última vez el archivo de prueba, para investigar. La lógica del correo electrónico puede ser compleja si los scripts intentan decidir la causa raíz/persona a quien enviar el correo. Por lo general, el script me envía un correo electrónico para investigar, y el equipo de desarrollo recibe un correo electrónico de CC en caso de que esté ausente o no esté disponible para investigar de inmediato.