2012-01-16 12 views
5

Quando eseguo un test perl utilizzando l'utilità prove, fallisce se il metodo in prova contiene le frasi print che non vengono terminate da newline.Test fallito in prova se scrive su stdout senza newline

use Test::More tests=>1; 

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

sub foo{ 
    print "A"; 
    1; 
} 

Questo si traduce in

Bad plan. You planned 1 tests but ran 0. 

Se aggiungo una nuova riga: print "A\n"; il test viene superato.

(Si noti che se eseguo semplicemente il test perl mytest.t anziché utilizzare prove, esso passa in entrambi i casi).

Qualche idea sul perché questo potrebbe essere e su come aggirarlo?

+5

Vedere http://stackoverflow.com/q/1538260/1030675 L'output di 'print' interferisce con ciò che' dimostra' si aspetta. – choroba

risposta

2

ho trovato una soluzione rapida:

$|=0;  # no auto-flush 

... ma non ho idea (ancora) perché questo funziona.

+0

Grazie funziona ed è più semplice della localizzazione di stdout ecc. Posso vedere che quando faccio questo, con l'interruttore dettagliato abilitato, che le istruzioni di stampa di prova compaiono su una riga _after_ la riga 'ok - prova passato', mentre prima sono comparsi sulla stessa linea. È quasi come se "provare" stessero analizzando il proprio output al momento di decidere se il test eseguito fosse passato al 100%. (Si noti che il test originale non ha fallito di per sé, ma 'prove' lo stava scontando quando si è verificato il numero di test eseguiti.) – perlyking

Problemi correlati