2012-01-09 12 views
11

He estado tratando de echo cosas en mis pruebas de phpunit, pero no tuve suerte hasta ahora.eco en las pruebas de phpunit

He leído la documentación sobre el archivo de configuración xml y aparentemente el parámetro debug es lo que estoy buscando. Lamentablemente, todavía no funciona. De todos modos aquí está mi archivo de configuración xml:

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit colors="true" 
     processIsolation="true" 
     verbose="true" 
     debug="true"> 
</phpunit> 

Tanto processIsolation y verbose son aceptados pero no es debug.

El comando realidad funciona bastante bien cuando pase directamente a PHPUnit así:

phpunit --debug MyTest.php # here stuff is echoed correctly 

pero con la configuración de archivo XML que parece que se ignora.

Respuesta

15

Las versiones actuales de PHPUnit >3.6.4 (y todas las versiones 3.5.*) se acaba de imprimir todo lo que echo en un caso de prueba.

<?php 

class OutputTestCase extends PHPUnit_Framework_TestCase { 

    public function testEcho() { 
     echo "Hi"; 
    } 
} 

produce:

phpunit foo.php 
PHPUnit 3.6.7 by Sebastian Bergmann. 

.Hi 

Time: 0 seconds, Memory: 3.25Mb 

OK (1 test, 0 assertions) 

Así que si usted está en una vieja versión 3.6 acaba de actualizar :)

+2

estoy en 3.6.3 ya por lo que no puede ser eso. ¿Cómo se lanzó OutputTestCase? Porque si lo lanzó con phpunit --debug OutputTestCase.php entonces sí funciona pero de lo contrario no funciona. – nourdine

+2

Como dije, ** necesitas ** 'phpunit> 3.6.4' para que esto funcione. Con 3.6.3 NO obtendrás esa salida sin ejecutar --debug. Si actualiza esto funcionará como el comportamiento en PHPUnit cambiado :) – edorian

+7

Por lo que vale no parece funcionar en absoluto en la versión 4.1, incluso con la opción --debug ... –

3

Asegúrese de que no se llama a la salida() o mates(). PHPUnit almacena en búfer las instrucciones de eco y ese búfer se perderá sin salida si su secuencia de comandos se cierra durante la prueba.

1

processIsolation está suprimiendo la salida de las pruebas, por lo que debe deshabilitarla. La interacción con la bandera debug fue probablemente un descuido introducido con esto: https://github.com/sebastianbergmann/phpunit/pull/1489

+2

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/13915236) – Serjik

+0

No entiendo, lo que quiere decir ... Toda la información relevante está en la respuesta. –

+0

mira la respuesta aceptada, se describe por completo y se proporciona un ejemplo, tu audiencia es todo el universo no solo la pregunta asker – Serjik

0

En caso de que su prueba dura mucho tiempo y que le gustaría ver la salida durante el proceso, agregue el método siguiente a la clase de prueba:

protected function prontoPrint($whatever = 'I am printed!') 
{ 
    // if output buffer has not started yet 
    if (ob_get_level() == 0) { 
     // current buffer existence 
     $hasBuffer = false; 
     // start the buffer 
     ob_start(); 
    } else { 
     // current buffer existence 
     $hasBuffer = true; 
    } 

    // echo to output 
    echo $whatever; 

    // flush current buffer to output stream 
    ob_flush(); 
    flush(); 
    ob_end_flush(); 

    // if there were a buffer before this method was called 
    //  in my version of PHPUNIT it has its own buffer running 
    if ($hasBuffer) { 
     // start the output buffer again 
     ob_start(); 
    } 
} 

Ahora cada vez que llame $this->prontoPrint($variable) dentro de su clase de prueba, se mostrará inmediatamente el texto en la consola. Usé este php.net comment para escribir la función.

PHPUnit 5.7.21PHP 5.6.31 with Xdebug 2.5.5

+0

de alguna manera esta solución no limpia el búfer usado; quizás podrías reescribirlo para evitar este mensaje: 'Código de prueba o el código probado no cerró (solo) sus propios búfers de salida – serup

Cuestiones relacionadas