2012-01-16 7 views
5

Cuando ejecuto una prueba perl usando la utilidad prove, falla si el método bajo prueba contiene declaraciones print que no terminan en nuevas líneas.La prueba falla en la prueba si escribe en stdout sin nueva línea

use Test::More tests=>1; 

ok(foo(), "calling foo"); 

sub foo{ 
    print "A"; 
    1; 
} 

Esto se traduce en

Bad plan. You planned 1 tests but ran 0. 

Si añado una nueva línea: print "A\n"; pasa la prueba.

(Tenga en cuenta que si simplemente ejecuto la prueba perl mytest.t en lugar de usar prove, pasa de cualquier manera).

¿Alguna idea de por qué esto podría ser y cómo solucionarlo?

+5

Consulte http://stackoverflow.com/q/1538260/1030675 La salida de 'print' interfiere con lo que' probatest' espera. – choroba

Respuesta

2

me encontrado una solución rápida:

$|=0;  # no auto-flush 

... pero no tengo idea (aún) por qué esto funciona.

+0

Gracias esto funciona y es más simple que localizar stdout etc. Puedo ver que cuando hago esto, con el interruptor detallado habilitado, que las instrucciones de impresión de prueba aparecen en una línea _después_ de la línea 'ok - prueba pasada', mientras que antes aparecieron en la misma línea. Es casi como si 'demos' estuviera analizando su propio resultado al decidir si la ejecución de la prueba había pasado el 100%. (Tenga en cuenta que la prueba original no estaba fallando per se, sino que 'evidence 'la estaba descartando al contar el número de pruebas ejecutadas). – perlyking

Cuestiones relacionadas