2008-09-08 8 views

risposta

23

Dipende davvero da cosa si sta tentando di fare, ma ecco alcuni retroscena per gran parte di questo.

In primo luogo, si dovrebbe in genere scrivere i tuoi programmi di test con Test :: More o Test :: Simple come il programma di test di base:

use Test::More tests => 2; 

is 3, 3, 'basic equality should work'; 
ok !0, '... and zero should be false'; 

Internamente, Test :: Builder è chiamato ad uscita quei risultati del test come TAP (Test Anything Protocol). Test :: Harness (un sottile involucro attorno a TAP :: Harness), legge e interpreta il TAP, comunicandoti se i test sono stati superati o falliti. Lo strumento "prova" menzionato sopra è fornito in bundle con Test :: Harness, quindi diciamo che salva quanto sopra nella directory t/(la directory di test Perl standard) come "numeri".t", quindi è possibile eseguire con questo comando:

prove --verbose t/numbers.t 

O per eseguire tutti i test in quella directory (ricorsivamente, supponendo che si vuole scendere nella sottodirectory):

prove --verbose -r t/ 

(--verbose , naturalmente, è facoltativo).

Come nota a margine, non usano TestUnit. Molte persone consigliano, ma è stato abbandonato molto tempo fa e non si integra con moderni strumenti di test.

0

mi piacerebbe andare per Test :: More, o, in generale, tutto ciò che emette TAP

0

A partire da ora, usiamo Test :: More ma attuale problema è che abbiamo per eseguire tutti i file di test manualmente per il test. Quello che sto cercando è un quadro più automatizzato che può eseguire controlli incrementali di test/build, ecc.

Un involucro attorno a Test :: Altro per questo sarebbe l'ideale, ma qualsiasi cosa migliore e più funzionale andrebbe bene.

Sto attraversando PerlUnit per vedere se questo aiuta.

+1

prega di non utilizzare PerlUnit. È stato abbandonato Se è necessario un framework xUnit, vedere Test::Class. È attivamente mantenuto e si integra con il framework di test standard di Perl. – Ovid

2

Se stai usando ExtUtils::MakeMaker o Module::Build, allora è possibile eseguire tutti i test automaticamente inserendo il comando "make test" o "test build", che eseguirà qualsiasi file * .t nella t/sottocartella del progetto.

Se non si utilizza nessuno di questi, è possibile utilizzare TAP::Harness per automatizzare l'esecuzione di più script di test.

Per scrivere effettivamente i test, utilizzare Test::More o uno dei moduli che altri hanno suggerito qui.

0

Sei a conoscenza dell'utilità "prova" (da App :: Prove)? Puoi dire di eseguire tutti i test in modo ricorsivo in una determinata directory, con o senza verbosità, ecc.

1

Personalmente, mi piace Test :: Most, fondamentalmente Test :: More con alcune funzionalità interessanti.

9

Partenza CPAN Testers, che hanno un sacco di strumenti per test automatizzati. La maggior parte di questo dovrebbe essere su CPAN in modo da essere in grado di modificarlo per soddisfare le tue esigenze. È anche molto facile scrivere il tuo tester utilizzando TAP :: Harness.

Che cosa esattamente devi fare e come stai cercando di integrarlo nel tuo processo?

2

dobbiamo eseguire manualmente tutti i file di test per la verifica

Certamente voglio essere utilizzando dimostrare (corre il test) e/o il modulo :: Costruire (costruisce il codice e poi esegue il test utilizzando il lo stesso codice di imbracatura di test che si dimostra utilizzato internamente.)

0

Per i test automatizzati in perl dare un'occhiata a Test::Harness, che contiene lo strumento prove.

Il prove strumento può essere eseguito con il seguente comando:

prove -r -Ilib t 

Ciò recursivly prova tutti i file * .T nella directory 't /', mentre l'aggiunta lib al percorso includere.

+0

-l è una scorciatoia per -Ilib – Schwern

1

Il quadro suite di test di scelta è Test::Harness, che si occupa di controllare una prova, raccogliendo i risultati, ecc

vari moduli esistono per fornire certi tipi di test, il più comune dei quali possono essere trovati in Test::Simple e Test::More (entrambi sono inclusi nella distribuzione Test-Semplice). L'intero spazio dei nomi di Test sul CPAN è dedicato a moduli di test unitari specializzati, la maggior parte dei quali sono progettati per essere eseguiti in Test :: Harness.

Per convenzione, i test sono memorizzati nella directory t/di un progetto e ogni file di test utilizza l'estensione del file .t; i test sono comunemente eseguiti tramite

prove t/*.t 

distribuzioni di moduli includono tipicamente un target make chiamato 'test' che gestisce la suite di test prima dell'installazione. Per impostazione predefinita, il processo di installazione CPAN richiede che i test passino dopo la compilazione prima che un modulo venga installato.

5

Hai visto smolder?

"Aggregatore di test del fumo utilizzato da sviluppatori e tester per caricare (automatizzato o manualmente) e visualizzare i test fumo/regressione utilizzando il Test Anything Protocol. Dettagli e tendenze sono rappresentate graficamente e notifiche fornite tramite e-mail o Atom feed."

+0

Questo è bello, ma Smolder non sembra più analizzare correttamente gli archivi TAP. –

2

Lei ha detto:

"Quello che sto cercando è un di più di quadro automatizzato che può fare il test incrementale/costruire controlli ecc"

Ancora non è del tutto sicuro di quello che stai dopo .Come altri hanno menzionato, si desidera esaminare le cose che sono basate su Test :: Harness/TAP. La stragrande maggioranza della comunità di test di Perl utilizza tale framework, quindi avrai molto più supporto (e utile codice esistente) usando quello.

Puoi parlarci un po 'di più di cosa intendi con "test incrementali/compilazione"?

Immagino che vogliate dividere i test in gruppi in modo da eseguire determinate serie di test solo in determinate circostanze?

Ci sono un paio di modi per farlo. La più semplice sarebbe quella di utilizzare solo il file system - dividere le vostre directory di test in modo da avere le cose come:

 

core/ 
database.t 
infrastructure.t 
style/ 
    percritic.t 
ui/ 
    something.t 
    something-else.t 

E così via ... è possibile utilizzare la riga di comando "provare" strumento per eseguire tutti , o solo determinate directory, ecc.

dimostra ha molte opzioni utili che consentono di scegliere quali test eseguire e in quale ordine (ad esempio, come l'ordine più recente-fallito). Questo - tutto da solo - probabilmente ti porterà verso ciò di cui hai bisogno.

(È importante ottenere una versione recente di Test :: Semplice/prova/ecc. Da CPAN. Le versioni recenti hanno molte, molte più funzionalità).

Se sei di una mentalità OO o hai precedenti esperienze di xUnit framework, potresti voler dare un'occhiata a Test :: Class, che è un framework Perl xUnit che è stato creato sopra il TAP/Test: : Strato del cablaggio. Penso che sia un bel po 'meglio di PerlUnit - ma direi che da quando l'ho scritto :-)

Partenza delizioso per un po' più informazioni Test :: Classe http://delicious.com/tag/Test::Class

Se questo non è ciò che si stai dopo - potresti entrare un po 'più in dettaglio su quale funzionalità desideri?

Cheers,

Adrian