LINGUAGGI DINAMICI
PARTE 3

APPLICAZIONI
AVANZATE

Linguaggi dinamici – A.A. 2009/2010
                                   ...
Parte 3




                              Unit Testing
                                in Perl




Linguaggi dinamici – A....
Introduzione
   Il Perl mette a disposizione tutta una serie di
     meccanismi per lo Unit Testing di moduli
         Mod...
Test semplici con Test::Simple
   Il modulo Test::Simple fornisce un supporto di
     base per lo Unit Testing in Perl
   ...
Test semplici con Test::Simple
   Un test è un file richiedente Test::Simple ed
     invocante un certo numero di asserzio...
Test semplici con Test::Simple
   L'insieme dei test che si vuole eseguire è detto
     test plan
   E' possibile specific...
ESEMPI:
                                                  simple1.pl
        Test di moduli con Test::Simple           sim...
Test più complessi con Test::More
   Il modulo Test::More introduce diverse
     estensioni funzionali a Test::Simple
    ...
ESEMPI:
                                                       more1.pl
     Test più complessi con Test::More            ...
ESEMPI:
                                                        more3.pl
     Test più complessi con Test::More
   E' poss...
ESEMPI:
                                                             more4.pl
     Test più complessi con Test::More
   As...
ESEMPI:
                                                           more5.pl
     Test più complessi con Test::More
   Asse...
Test più complessi con Test::More
   Asserzione cmp_ok(): confronto effettuato con
     una funzione specifica
         cm...
ESEMPI:
                                                          more6.pl
     Test più complessi con Test::More         ...
ESEMPI:
                                                     more7.pl
     Test più complessi con Test::More
   Asserzione...
Test più complessi con Test::More
   Asserzione new_ok(): crea un oggetto di una
     data classe, lo assegna ad una varia...
Test più complessi con Test::More
   Asserzione use_ok(): verifica se è possibile
     caricare un dato modulo
         BE...
ESEMPI:
            Esecuzione condizionale con                    more9.pl

                    Test::More
   E' possibil...
ESEMPI:
                                                    harness1.pl
           Suite di test con Test::Harness
   Il m...
Upcoming SlideShare
Loading in …5
×

Pe a1 perl-unit_testing

401 views

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
401
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Pe a1 perl-unit_testing

  1. 1. LINGUAGGI DINAMICI PARTE 3 APPLICAZIONI AVANZATE Linguaggi dinamici – A.A. 2009/2010 1
  2. 2. Parte 3 Unit Testing in Perl Linguaggi dinamici – A.A. 2009/2010 2
  3. 3. Introduzione Il Perl mette a disposizione tutta una serie di meccanismi per lo Unit Testing di moduli Moduli della gerarchia Test::* Test::Simple: test semplici, da eseguire su singoli statement Test::More: estensione di Test::More con più tipologie di controlli Test::Harness: creazione suite di test perldoc Test::Simple, perldoc Test::More, perldoc Test::Harness Linguaggi dinamici – A.A. 2009/2010 3
  4. 4. Test semplici con Test::Simple Il modulo Test::Simple fornisce un supporto di base per lo Unit Testing in Perl Viene fornito il metodo di base per le asserzioni: ok() ok($expr, $test_name); Valuta $expr in contesto scalare, e stampa “ok” se tutto va bene, “not ok” se qualcosa va storto Se $name è una stringa non nulla, viene stampata insieme al risultato del test Linguaggi dinamici – A.A. 2009/2010 4
  5. 5. Test semplici con Test::Simple Un test è un file richiedente Test::Simple ed invocante un certo numero di asserzioni ok() Il numero totale di asserzioni viene stampato all'inizio, nella forma 1..M (M=numero asserzioni) Il programma termina con un codice di uscita indicante quanti test sono stati sbagliati 0: tutti i test sono andati a buon fine 255: tutti i test sono falliti 1-254: numero di test falliti Linguaggi dinamici – A.A. 2009/2010 5
  6. 6. Test semplici con Test::Simple L'insieme dei test che si vuole eseguire è detto test plan E' possibile specificare il test plan in termini di numero di test da eseguire Parametro tests del modulo use Test::Simple tests = 1; Si riesce a capire se il test ha abortito prematuramente Il test plan deve essere specificato, pena un messaggio di errore Linguaggi dinamici – A.A. 2009/2010 6
  7. 7. ESEMPI: simple1.pl Test di moduli con Test::Simple simple2.pl Si importa il modulo desiderato Si esegue una funzione del modulo Si confronta il risultato della funzione con un valore di riferimento Lo stesso discorso vale anche per gli oggetti! Con Test::Simple è possibile effettuare asserzioni solo su scalari semplici Linguaggi dinamici – A.A. 2009/2010 7
  8. 8. Test più complessi con Test::More Il modulo Test::More introduce diverse estensioni funzionali a Test::Simple Test plan non dichiarabile esplicitamente Introduzione di asserzioni più complesse di ok() Supporto per i test condizionali Controllo del flusso di un test Linguaggi dinamici – A.A. 2009/2010 8
  9. 9. ESEMPI: more1.pl Test più complessi con Test::More more2.pl Analogamente a Test::Simple, è possibile predichiarare il numero di test eseguiti all'interno del file Diversamente da Test::Simple, tale dichiarazione non è più obbligatoria Funzione no_plan del modulo use Test::More qw( no_plan ); E' anche possibile saltare l'intero test Parametro skip_all del modulo use Test::More skip_all = $skip_reason; Linguaggi dinamici – A.A. 2009/2010 9
  10. 10. ESEMPI: more3.pl Test più complessi con Test::More E' possibile calcolare dinamicamente il numero di test che saranno eseguiti! Funzione plan(): associa al parametro tests il risultato di una espressione oppure associa al parametro skip_all il motivo della non esecuzione del test E' possibile differenziare il test fra diversi sistemi operativi, usando la variabile speciale $^O Linguaggi dinamici – A.A. 2009/2010 10
  11. 11. ESEMPI: more4.pl Test più complessi con Test::More Asserzione is(): è funzionalmente identica ad ok() Effettua il controllo con eq Stampa il motivo per cui l'asserzione fallisce Fortemente consigliata rispetto ad ok() Asserzione isnt(): negazione di is() Effettua il controllo con ne Stampa il motivo per cui l'asserzione fallisce Fortemente consigliata rispetto a ! ok() Linguaggi dinamici – A.A. 2009/2010 11
  12. 12. ESEMPI: more5.pl Test più complessi con Test::More Asserzione like(): controlla se una variabile fa match con una espressione regolare like($got, qr/expected/, 'this is like that'); Equivalente a ok( $got =~ /expected/, 'this is like that'); L'uso di like() è preferito, per via del miglior output diagnostico Si noti l'operatore qr, che compila una espressione in una espressione regolare perldoc perlop Asserzione unlike(): negazione di like() Linguaggi dinamici – A.A. 2009/2010 12
  13. 13. Test più complessi con Test::More Asserzione cmp_ok(): confronto effettuato con una funzione specifica cmp_ok( $got, 'eq', $expected, 'this eq that' ); cmp_ok( $got, '==', $expected, 'this == that' ); Linguaggi dinamici – A.A. 2009/2010 13
  14. 14. ESEMPI: more6.pl Test più complessi con Test::More more8.pl Asserzione can_ok(): verifica se un modulo (oppure un'istanza di oggetto) hanno a disposizione il metodo specificato can_ok('Foo', qw(method_name)); Equivalente a ok(Foo-can('method_name')); Asserzione isa_ok(): verifica se un oggetto è un'istanza di una classe specifica isa_ok( $obj, 'Some::Module' ); Equivalente a ok(Foo-isa('Some::Module')); Linguaggi dinamici – A.A. 2009/2010 14
  15. 15. ESEMPI: more7.pl Test più complessi con Test::More Asserzione pass(): crea un test che passa sempre Equivalente a ok(1); Asserzione fail(): crea un test che fallisce sempre Equivalente a ok(0); Linguaggi dinamici – A.A. 2009/2010 15
  16. 16. Test più complessi con Test::More Asserzione new_ok(): crea un oggetto di una data classe, lo assegna ad una variabile e verifica la corretta creazione my $obj = new_ok( $class ); my $obj = new_ok( $class = @args ); Equivalente a my $obj = $class-new(@args); isa_ok $obj, $class, $object_name; Linguaggi dinamici – A.A. 2009/2010 16
  17. 17. Test più complessi con Test::More Asserzione use_ok(): verifica se è possibile caricare un dato modulo BEGIN { use_ok($module); } BEGIN { use_ok($module, @imports); } L'asserzione va inserita in un blocco BEGIN In tal modo, le funzioni esportate sono disponibili al test subito dopo la compilazione Linguaggi dinamici – A.A. 2009/2010 17
  18. 18. ESEMPI: Esecuzione condizionale con more9.pl Test::More E' possibile definire due blocchi di codice dal nome SKIP e TODO Blocco SKIP: dichiara una sequenza di test che devono essere ignorati Contiene una chiamata di funzione skip che specifica quanti test saltare, sotto quale condizione Blocco TODO: dichiara una sequenza di test che ci si aspetta fallisca Contiene una assegnazione del motivo di fallimento alla variabile stringa local TODO Linguaggi dinamici – A.A. 2009/2010 18
  19. 19. ESEMPI: harness1.pl Suite di test con Test::Harness Il modulo Test::Harness fornisce uno strumento basilare per la creazione di suite di test Viene messo a disposizione il metodo runtests () Accetta una lista di nomi di file Esegue i test relativi Interpreta lo stdout dei test Costruisce e presenta un report finale E' convenzione usare l'estensione .t con i file di test appartenenti a suite Linguaggi dinamici – A.A. 2009/2010 19

×