Tartalomjegyzék
Perl teszt
- Szerző: Sallai András
- Copyright © Sallai András, 2015
- Licenc: GNU Free Documentation License 1.3
- Web: http://szit.hu
Az egységtesztekről
Az egységtesztekkel függvényeket, modulokat, utasítások sikeres vagy sikertelen végrehajtását tesztelünk. Azt vizsgáljuk, hogy a kívánt eredményt adja-e az adott függvény, vagy éppen adott modul be van-e töltve, adott változó a kívánt értéket tartalmazza.
A teszteléshez többféle Modul áll rendelkezésre. Ha egy modul függvényeit teszteljük, azt egy külön programban célszerű megtenni. Így függetlenül fejlődhet a teszt és az ipari kód.
Tesztmodulok
A Test::More
A use deklarációnál megtervezhetjük hány darab tesztet szeretnénk írni.
use Test::More tests => 15;
Ha szeretnénk átugrani teszteket:
use Test::More skip_all => $skip_reason;
A tervezett tesztek száma, később is megadható:
use Test::More; done_testing( 5 );
A plan() függvény is használható:
use Test::More; plan tests => 5;
A tesztek mindig kiírják, hogy „ok” vagy „not ok” egy teszt. Ez után a teszt sorszámát írja képernyőre:
ok 3 not ok 4 ok 5
A teszteket el is nevezhetjük
1..5 ok 1 - require Haromszog; ok 2 - területszámítás ok 3 - területszámítás ok 4 - kerületszámítás ok 5 - kerületszámítás
$kerulet = 0; ok( $kerulet > 0, "Az alap nagyobb mint 0 vizsgálat");
Ha az eredmény csak 105 lehet:
is( szamitKerulet(30, 35, 40), 105, "kerületszámítás vizsgálat" );
Ha az eredmény nem lehet 0:
isnt( szamitKerulet(30, 35, 40), 0, "kerületszámítás" );
Szabályos kifejezés használata:
like($nev, qr/Nagy/, "Nagy vezetéknév vizsgálata");
Azokat keressük, akik nem Nagyok:
unlike($nev, qr/Nagy/, "Nem Nagy vezetéknevüek vizsgálata");
Két érték összehasonlítása:
cmp_ok( $amitKaptam, $ezKelleneLegyen, $elvartErtek, $tesztNev );
Egy adott modul, azon belül, egy adott függvény elérhető?
can_ok(Haromszog, "szamitKerulet");
Metódusok tömbjét is vizsgálhatjuk:
@metodusok = ("szamitKerulet", "szamitTerulet"); foreach my $metodus (@metodusok) { can_ok('Haromszog', $metodus); }
- Haromszog.pm
#!/usr/bin/env perl package Haromszog; use Exporter; use vars qw($VERSION @ISA @EXPORT); $VERSION = '1.00'; @ISA = qw(Exporter); @EXPORT = qw(szamitTerulet szamitKerulet); sub szamitTerulet { ($alap, $magassag) = @_; $terulet = ($alap * $magassag) / 2.0; return $terulet; } sub szamitKerulet { ($a, $b, $c) = @_; $kerulet = $a + $b + $c; return $kerulet; } 1;
- HaromszogTeszt.pl
#!/usr/bin/env perl use Haromszog; use Test::More tests => 5; require_ok( 'Haromszog' ); is( szamitTerulet(30, 35), 525, "területszámítás" ); is( szamitTerulet(130, 140), 9100, "területszámítás" ); is( szamitKerulet(30, 35, 40), 105, "kerületszámítás" ); is( szamitKerulet(130, 140, 150), 420, "kerületszámítás" );
A Test::More folytatása
isa_ok()
Megvizsgálhatjuk, hogy adott objektum, adott osztályból, van-e származtatva.
isa_ok($mari, 'Mernok', "A mari objektum a Mernok osztályból");
Teljes kód:
- prog01.pl
#!/usr/bin/env perl package Dolgozo; sub new { my $class = shift; my $self = { _nev => shift, _szuletes => shift, _fizetes => shift, }; bless $self, $class; return $self; } sub lekerNev { my( $self) = @_; return $self->{_nev}; } sub beallitNev { my ( $self, $nev ) = @_; $self->{_nev} = $nev if defined($nev); } package Mernok; our @ISA = qw(Dolgozo); sub new { my($class) = @_; my $self = $class->SUPER::new(@_[1], @_[2], @_[3]); $self->{_diploma} = undef; bless $self, $class; return $self; } sub beallitDiploma { my ( $self, $diploma ) = @_; $self->{_diploma} = $diploma if defined($diploma); } sub lekerDiploma { my( $self) = @_; return $self->{_diploma}; } package main; use Test::More; $mari = new Mernok( "Piros Mária", "1985-06-01", 870000); $mari->beallitDiploma("ABE34224"); print $mari->lekerNev()."\n"; print "Diploma száma: ".$mari->lekerDiploma() . "\n"; isa_ok($mari, 'Mernok', "A mari objektum a Mernok osztályból"); done_testing();
new_ok()
A Mernok osztályból származtatás rendben?
my $kati = new_ok(Mernok);
Altesztek futtatása
- prog01.pl
#!/usr/bin/env perl use Test::More; pass("Első teszt"); pass("Második teszt"); subtest 'Altesztpélda' => sub { plan tests => 3; pass("Első alteszt"); pass("Második alteszt"); pass("Harmadik alteszt"); }; pass("Negyedik teszt"); done_testing();
A pass() és a fail()
Néha szeretnénk csak úgy hibás vagy sikeres teszteredményt viszontlátni a képernyőn. Erre való a fail(), pass() páros.
pass("Első teszt); fail("Második teszt");
Ezek tulajdonképpen a ok(1) és ok(0) szinonimái.
Modulok tesztelése
Szeretnénk ellenőrizni, hogy egy modul betöltődött-e. Erre a require_ok() és a use_ok() függvények adnak lehetőséget.
# szükséges modul: Valami::Modul require_ok "Valami::Modul"; # szükséges fájl "valami/fajl.pl"; require_ok "valami/fajl.pl";
A use_ok csak modulok tesztelésre való.
BEGIN { use_ok('Valami::Modul', qw(egy ketto)) }
BEGIN { use_ok('Valami::Modul') }