Tartalomjegyzék

< Perl

Perl teszt

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') }