• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Pe a1 perl-unit_testing
 

Pe a1 perl-unit_testing

on

  • 348 views

 

Statistics

Views

Total Views
348
Views on SlideShare
348
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Pe a1 perl-unit_testing Pe a1 perl-unit_testing Presentation Transcript

    • LINGUAGGI DINAMICI PARTE 3 APPLICAZIONI AVANZATE Linguaggi dinamici – A.A. 2009/2010 1
    • Parte 3 Unit Testing in Perl Linguaggi dinamici – A.A. 2009/2010 2
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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