2010-10-01 17 views
19

Io uso PHPUnit per i test unitari errore, ma quando viene attivato un errore fatale, lo script muore e non ho nessuna uscita PHPUnit corretta.PHPUnit: Fatal movimentazione

Mi piacerebbe che l'output PHPUnit rimanga correttamente formattato, perché viene letto da un plugin per Eclipse. In realtà l'errore fatale si ferma a PHPUnit e in Eclipse il plugin non può interpretare nulla (perché lo script PHPUnit aveva un errore, invece di gestirlo).

Grazie

+0

che tipo di errori fatali? se sono sintassi o relative alla semantica, sei sfortunato. – stillstanding

risposta

26

È necessario utilizzare le funzioni di isolamento del processo di PHPUnit - avviare ciascuna suite di test in un nuovo processo.

phpunit --process-isolation ... 

Questo è l'unico modo per assicurarsi che gli errori irreversibili non interrompano l'output della phpunit.

Execution time

isolamento del processo di moltiplica il tempo di esecuzione di test, perché per ogni singolo test, viene avviata una nuova istanza di PHP, il bootstrap viene eseguito ecc

Per modificare questa situazione, si può scegliere di eseguire casi di test completi in un processo separato (@runTestsInSeparateProcesses) o solo singoli a volte letali (@runInSeparateProcess).

+1

Essere avvantaggiati aumenta notevolmente l'esecuzione del test. Siamo passati da 4 secondi a 90 secondi qui con solo 150 test su una piccola app. – stefgosselin

+0

È possibile disabilitare "globali globali di backup" per ottenere velocità di test migliori. Dipende anche dalla velocità del tuo file di bootstrap. – cweiske

+0

- l'isolamento del processo può causare enormi danni al cervello quando cercherò di eseguire 7000+ test, ho usato 'register_shutdown_function()' in --bootstrap e --printer per l'integrazione di TeamCity. Condividerò le fonti più avanti questo mese. –

2

set_error_handler() non vi aiuterà lì. È possibile rilevare errori irreversibili utilizzando register_shutdown_function()

+0

Come detto, mi piacerebbe avere un errore PHPUnit (voglio che l'output phpunit non sia incasinato). Ho esteso la descrizione della domanda. –