2011-12-07 16 views
16

Am utilizando PHPUnit para la unidad de pruebas de mis funciones, cuando cada vez ninguna advertencia se produce en el código de la escritura de la prueba no se ejecutará para que las funciones, puede alguien decirme cómo hacer caso omiso de las advertencias y proceder con la pruebaHaciendo caso omiso de las advertencias de PHP en la PHPUnit

+10

Me parece que la prueba de la unidad está funcionando como debiera. Repare el código para que no arroje advertencias o errores. – JJJ

+0

@Juhana: Solo necesito devolver el valor de la función. No me preocupan las advertencias. La función que estoy probando funciona bien. –

+1

En un contexto de trabajo en equipo, a veces tienes que probar tu propio paquete, y no tienes tiempo/credenciales/misión para limpiar los otros paquetes (que pueden arrojar advertencias simplemente porque existen, incluso no llamadas) por lo que el "Soluciona el código "el comentario parece irrelevante cuando solo quieres probar una función específica. – Xmanoux

Respuesta

28

Como Juhana comentó, primero debes arreglar tu código donde aparecen las advertencias. Es una señal de que el código no funciona correctamente/estrictamente.

De forma predeterminada, PHPUnit convierte los errores de PHP, las advertencias y los avisos que se activan durante la ejecución de una prueba en una excepción.

Ver Testing PHP Errors que tiene más información cómo probar sus advertencias (y cómo hacer caso omiso de las advertencias en sub-rutinas que llaman en las pruebas).

Para desactivar el comportamiento predeterminado, puede decirle a PHPUnit que lo haga en sus pruebas, p. dentro del setUp de la prueba o la prueba en sí estableciendo una variable estática en el espacio de nombres global:

# Warning: 
PHPUnit_Framework_Error_Warning::$enabled = FALSE; 

# notice, strict: 
PHPUnit_Framework_Error_Notice::$enabled = FALSE; 

Otra opción para cambiar el comportamiento por defecto es configure the testrunner with an XML file con los siguientes valores:

<phpunit convertErrorsToExceptions="false" 
     convertNoticesToExceptions="false" 
     convertWarningsToExceptions="false"> 
</phpunit> 

Estos tres opciones no están disponibles como conmutadores de línea de comandos.

Ver también la pregunta relacionada: test the return value of a method that triggers an error with PHPUnit.

+0

agradece u funciona con "# aviso, estricta: PHPUnit_Framework_Error_Notice :: $ enabled = FALSO; " –

+2

me trató de usar esto para probar algunas operaciones de archivo con vfsStream. Desactivar las excepciones PHP_Unit no funcionó (debido a algunos chmod() que no son compatibles). Después de todo, tengo que usar un buen y antiguo operador de silencio '@'. – Zap

2

La estrategia documentada para hacer esto a nivel de prueba es utilizar el operador de supresión de errores @ cuando su prueba invoca la función que provocaría una advertencia o aviso.

El código siguiente es el ejemplo de la PHPUnit documentation:

<?php 
class ErrorSuppressionTest extends PHPUnit_Framework_TestCase 
{ 
    public function testFileWriting() { 
     $writer = new FileWriter; 
     $this->assertFalse(@$writer->write('/is-not-writeable/file', 'stuff')); 
    } 
} 
class FileWriter 
{ 
    public function write($file, $content) { 
     $file = fopen($file, 'w'); 
     if($file == false) { 
      return false; 
     } 
     // ... 
    } 
} 
Cuestiones relacionadas