Moduł Test::More
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Wstęp
Test::More to moduł pozwalający na usprawnienie testowania skryptów. Jest kompatybilny wstecznie z modułem Test::Simple, tzn że można rozbudowywać skrypty testujące ze starych wykorzystujących moduł Test::Simple. Z tego względu pominięto w opisie tą samą funkcję testującą ok() , której opis znaleźć można na tej stronie w dziale Test::Simple. Poniżej opisane będą funkcje rozszerzające funkcjonalność modułu Test::More względem TEst::Simple. Jeżeli czytelnik nie zna jeszcze modułu Test::Simple to propunję najpierw przeczytać jego opracowanie.Opis
Test::More oferuje kilka róznych sposobów porównywania wartości. Są to funkcje:
- is()
- isnt()
- like()
- unlike()
- cmp_ok()
- can_ok()
- isa_ok()
Funkcja is() może przyjmować dwa lub trzy argumenty, analogicznie jak ok(). Różnica pomiędzy funkcją is() a ok() polega na raportowaniu błędów. Funkcja is() zwraca więcej szczegółów
w przypadku wystąpienia błędu:
not ok 1 - Nono noo
# Failed test 'Nono noo'
# at test.pl line 6.
# got: '1'
# expected: '2'
Innym podejściem do porównywania wartości jest metoda isnt() która jako parametry przyjmuje te same wartości: czyli pierwszy parametr to wartość w kontekście skalarnym
rozróżniania jako prawda fałsz, nasepny parametr to wartość do której jest porównywany parametr pierwszy. Oraz trzeci - opcjonalny parametr zawierający tekst,
który będzie wyświetlony w przypadku powodzenia testu. Funkcja ta sprawdza czy wartość jest różna od stałej.
isnt(2+3 , 3,"dwa dodac trzy jest różne od trzech");
Ciekawą funckją do tworzenia testów jest funkcja cmp_ok(), która przyjmuje do czterech argumentów:
cmp_ok($got,$operator,$expected,"Ok wynik pozytywny");
parametr $got to jakiś kod lub funkcja $operator przechowuje nam operator porównania. Zmienna $expected zawiera wartość oczekiwaną. Przykład użycia:
cmp_ok(foo(),"<",10,"wynik foo mniejszy od 10");
cmp_ok(foo(),">",10,"Wynik foo większy od 10");
cmp_ok(foo(),"==",10,"Wyniik foo równy 10");
Przekazywanie operatora porówniania jako parametru umożliwia w prosty sposób dynamiczne tworzenie skryptów.
Funkcja like() testuje zwracane wartości przypasowując je do wyrażeń regularnych, analogiczna jest funkcja unlike() z tym że testuje pod kątem nie dopasowania się do wyrażenia
regularnego np:
like( $got, '/expected/', "tego właśnie oczekiwaliśmy" );
można wykorzystywać wyrażenia regularne łacznie z modyfikatoprami np"
like( $got,'/expected/i',"tego właśnie oczekiwaliśmy..");
jest to równoważne funkcji
ok( $got =~'/expected/i',"tego właśnie oczekiwaliśmy..");
can_ok() jest to funkcja która sprawdza czy dana klasa lub obiekt będący pierwszym parametrem posiada metody przekazane jako drugi parametr - kojarzy się z obiektową metodą can();
np: <
can_ok(
Modul::Moj::Wlasny,
qw( jedz spij kochaj pracuj usmierc ),
"No tak już te wszystkie metody zaimplementowano")
);
ten kawałek kodu jest równoważny
ok(Modul::Moj::Wlasny->can(jedz)
&& Modul::Moj::Wlasny->can(spij)
&& Modul::Moj::Wlasny->can(pracuj)
&& Modul::Moj::Wlasny->can(usmierc),
"No tak już te wszystkie metody zaimplementowano"
);
z tym że wszystkie te meotdy modułu Test::More od metody ok() modułu Test::Simple różni jeszcze fakt zwracania dokładniejszych inforamcji w razie niepowodzenia testu!
isa_ok sprawdza po jakich modułach dziedziczy nasz obiekt, klasa. Przykład użycia:
isa_ok($czlowiek,qw(ssak zwierze_towarzyski,"Tak obiekt człowiek to ssak i w dodatku towrzyski");
Moduł Test::More zawiera jeszcze jedno "udoskonalenie" względem modułu Test::Simple - mianowicie obsługuje bloki SKIP i TODO
SKIP służy do pomijania fragmentu testu i używa się go tak:
SKIP:{
skip "Nie ma kolorowego monitora", 2 unless $kolorowy_monitor;
ok(koloruj_ekran($zielony));
ok(koloruj_text($zolty));
}
Etykieta SKIP jest obowiązkowa i pozwala określić jaki fragment skryptu należy pominąć podczas testów.
funkcji skip przekazuje się w parametrach kolejno: ilość testów do ominięcia oraz komunikat jaki będzie wyświtlany jako powód pominięcia testów.
dla powyższego przykładu skrypt wypisze:
ok 1 # skip Nie ma kolorowego monitora
ok 2 # skip Nie ma kolorowegop monitora
Etykieta TOTDO jest analogiczna do SKIP z tym że oznacza ona pominięte testy jako failed z informacją o tym iż są to testy pominięte ponieważ z jakichś powodów
pominięte funkcje nie zostały jeszcze zaimplementowane. Jednak końcowy - całkowity wynik testu będzie pozytywny.
Dodatkowe informacje
Dokumentacja na CPAN
Autor modułu i kontakt do niego
Autor: Damian Karpiński
Email: plactostomus@wp.pl