Professional Documents
Culture Documents
Laravel Tesztelés Egyszerűen (Magyarul!)
Laravel Tesztelés Egyszerűen (Magyarul!)
)
A tesztelsi knyv, amelyre mindig is vgytatok!
JeffreyWay and Zsellr Istvn
This book is for sale at http://leanpub.com/laravel-testing-decoded-hungarian
This version was published on 2013-08-30
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and
many iterations to get reader feedback, pivot until you have the right book and build traction once
you do.
2013 JeffreyWay and Zsellr Istvn
Tartalomjegyzk
Legyetek dvzlve . . . . . .
Megkezddtt . . . . . . . .
Nekem rtk ezt a knyvet? .
Mirt Laravel specifikus? . .
Gyakorlatok . . . . . . . . .
Hibk . . . . . . . . . . . .
Hogyan olvasd ezt a knyvet
Jelentkezz nekem . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
2
3
3
3
3
Bele az ismeretlenbe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
6
6
7
8
8
8
8
9
9
11
12
12
12
15
15
16
16
16
17
17
TARTALOMJEGYZK
Elfogadsi teszt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nyugi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
19
Legyetek dvzlve
Tl sokszor lttam ezt mr. Ahogyan egy applikci nvekszik, ugyangy a ronda, teszteletlen kd
is. Nemsokra gy rzed magad, mint aki fulladozik, ahogyan megprblod kzi vezrlsen tesztelni
minden funkcijt! Ilyenkor jut eszedbe, st bizonyoss vlsz, hogy szksg van automatikus
tesztelsre. Megkockztatom, mr olvastl TDD knyvet, de, ahogyan minden dolog az letben,
tapasztalat nlkl nem megy, s az aha pillanat vrat magra.
A gond az, hogy a tesztels elgg trkks foglalatossg. Knnyedn elfordulhat az is, ahogyan
a kdodat rtad, hogy tesztelhetetlen! Amit tudatostani kell, az, hogy a tesztels nem csak arra
garancia, hogy a kdod mkdik, de ezzel a mintval te is jobb fejlesztv vlhatsz. A ronda,
tesztelhetetlen, s kifacsart kdtl rkre megszabadulsz. Higgy nekem: mihelyt megkrded magadtl hogyan tesztelhetnm ezt a dolgot mieltt mg egy sort is rnl, vissza fogsz emlkezni a
rgi nmagadra, s nevetve gondolsz majd azokra az idkre, amikor mg kzpkori mdszerekkel
eszkbltl programokat.
Lgy dvzlve a modern szoftverfejleszts idszakban.
A szoftvertesztels alaptrvnyei (s a TDD) nyelvtl fggetlenek, amikor is a vgrehajtshoz rnk, millird technikval s eszkzzel szembeslnk. Ez a kny legalbb annyira
bevezets a TDD-be, mint egy mlyensznt analzis, hogyan kell ezt a Laravelben vgezni.
Megkezddtt
Amikor programozsi nyelvekr?l beszlnk, mindenkinek megvan a sajt vlemnye. Amikor pedig
ppen a PHP-rl diskurlunk, kszlj fel egy kis szvatsra . Annak ellenre, hogy ez a nyelv jcskn
megizmosodott az elmlt t vben , mindig lesznek olyanok, akik nem tudjk a PHP komolyan venni.
A hitetlenek nem ltjk az 5.5-s verzit, vagy az OOP-ot, vagy a modern keretrendszereket, mint a
Laravel, esetleg sosem hallottak a Composerrl, nem beszlve a test-first fejlesztsrl. Nem bizony,
k mg mindig a rgi, csf PHP 4 kdrl beszlnek, vagy egy rosszul sszedobott WordPress
sablonrl 2008-bl.
Szebb a PHP mint a Ruby? Nem. Az API-ja inkonzisztens idnknt? Biztosan. A kzssg vezet -e
az innovciban s szoftvertervezsben ? Definitve nem. A krds akkor, MIRT? Mirt dominl a
PHP - 80 szzalkos rsszel amikor a versenyben lv nyelvek mindegyike elegnsabb? Az okokat
mshol kell keresnnk. Tegyk fel, a tny, hogy ltrehozol egy fjlt, echo hello world tartalommal,
s mindjrt ltod is a kimenetet a bngszben sokkal inkbb felhasznlbart, mint azt magunknak
be merjk vallani. Lehetsges, hogy a flexibilitsa elnyre vlik, nem pedig htrnyra.
Legyetek dvzlve
Legyetek dvzlve
Gyakorlatok
Itt-ott ebben az iromnyban, Gyakorlatok-nak nevezett rszleteket fogsz ltni. Gondolj ezekre,
mint rszletes HOGYAN-okra, amelyeket neked kell megvalstanod, a fejezet rsa kzben. Az
elmlet nmagban nem elg; a programok rsa az, amely ezeket a mintkat, s technikkat
megjegyezhetv teszi.
Teht, amikor egy Gyakorlatok fejezethez rsz, kapcsold be a szmtgpet, s programozzunk
egytt!
Hibk
Krlek, tartsd szben azt, hogy megtettem mindent ami emberileg lehetsges, hogy ez a m lehetleg
hibamentes legyen, de n is csak haland vagyok. Ha valami hasonlt szlelsz, krlek jelentsd a
GitHubon, n pedig javtom, amint lehet. A legkitartbb hibartk jutalma csoportos lels.
Jelentkezz nekem
gy tnik sok idt fogunk egytt tlteni, kzs munklkodsunk sorn. Ha szeretnl kzelebbrl is
megismerni, esetleg pr krdsed lenne, ne felejts el beksznni.
IRC (#laravel channel): JeffreyWay
Twitter: @jeffrey_way
https://github.com/JeffreyWay/Laravel-Testing-Decoded
http://twitter.com/jeffrey_way
Bele az ismeretlenbe
Az j stt ftylt bortotta rnk Vrjunk csak, ez egy msik trtnet. Szval, az j csndes volt, csak
a lgkondi zrgtt egy picit. A felesgem s az llataim mr rgen magamra hagytak, s az igazak
lmt aludjk. A kutym, ahogyan ltalban, a legkitartbb volt, de nem rovok semmit sem a terhre;
ki vagyok n, hogy eltljem ket azrt, mert jjel hromkor aludni szeretnnek? Mindenesetre a
krlmnyek ppen megfelelek voltak. reztem legbell. Ahogyan minden figyelmemet a laptopom
kpernyjre irnytottam, a gondolataim egyszerre egyv forrtak .
A fejlesztk ismerik ezt az rzst: azok a ritka pillanatok, amikor, hirtelen, az azeltt megfejthetetlen,
most, legalbbis els pillantsra, rtelmet nyert. Sokan ezt aha pillanatnak nevezik. Az els
alkalom, amikor megrtettem, mire j a <div> olyan volt. Most mr, persze, mindenkinek rthet,
de ez nem tegnap volt. Minek pakolnm tele a HTML-t <div> -ekkel? A bngsz ugyanazt jelenti
meg! Az egyik nap azt mondtk nekem, gondoljak r mint kosarakra; tedd a HTML-t a kosrba,
aztn, ha valamit odbb kell raknod, csak a <div> -et kell jra pozicionlni. s vgre megrtettem.
Egy csom hasonl pillanatot idzhetnk fel, klnskppen a nehezen megjv tvgyamat az
objektum-orientlt programozshoz, interface-ek kdolsra, vgl teszt-vezrelt fejlesztsre.
Igen, az utbbi dolog nem volt szerelem els ltsra, be kell vallanom. Ahogyan a legtbb fejleszt
is, olvastam egy knyvet, vagy egy cikket rla, aztn azt gondoltam, Hmm, ez rdekesnek tnik
aztn folytattam mindent ahogyan azeltt. Vgl is megmaradt a tudatomban, s az elejn olyan
lgy hangocska egyre hangosabb, s kveteldzbb lett.
Ezt tesztelned kell, Jeffrey. Ha ezt mr tesztelted volna, mr nem kne megint meg
megint futtatnod a programot Ki fognak rhgni, ha erre a pull requestre nem rsz
teszteket.
Mint ahogyan a legtbb dolog az letben, az igazi vltozs ers elhatrozst kvn, s nem rt, ha
az egsz vilggal tudatjuk, Soha tbb! Vgeztem a rgi dolgokkal. s megtettem. Ezrek tettk
ugyanezt. Most pedig rajtad a sor.
Ahogyan Leeroy Jenkins mondan, rendben: fogjunk neki! Ez az a tesztelsi knyv, amelyre
mindannyian vrtatok.
http://www.youtube.com/watch?v=LkCNJRfSZBU
Mr eddig is teszteltl
Az igazsg az, hogy mr rgen a tesztels mestere vagy . Ha mr egyszer is lertad, hogy console.log,
vagy elkldtl egy rlapot a web applikcidban, hogy lsd, hogyan mkdik valamilyen j funkci,
akkor mr teszteltl is. Mg klykkorunkban is, mestertesztelk voltunk. Ha megcsavarom ezt a
gombot , az ajt kinylik. Gyzelem!
A gond az, hogy mindezen teszteket kzileg kellett vgezni. Mirt gykdnl olyan dolgokon,
amelyeket a szmtgp el tud vgezni helyetted(mellesleg sokkal gyorsabban)? A knyv clja, hogy
a manulis tesztelstl eljussunk a teljesen automatikusig. Ez lehetv teszi az lland tesztelsi krt,
amelyeknl az applikci fejlesztse kzben egy-egy teszt hajtdik vgre. Meglepen biztonsgoss
teszi ez a fejlesztst.
http://notes.envato.com/team/jeffrey-wins-a-bet/
Amikor egy fejleszt felfedezi a test-vezrelt fejleszts tulajdonsgait, olyan rzse tmad, mintha egy j vilg nylna meg szmra kevesebb stresszel, s bizonytalansggal.
- DHH
1. Biztonsg
Ha hibzol, vagy egy ltez funkcit teszel tnkre, a test robot azonnal jelenti. Kpzeld el, hogy lersz
valamit, mented, majd abban a pillanatban zenetet kapsz arrl, hogy minden mkdik-e. Nem lenne
nyugodalmasabb az lmod? Emlkszel arra a rondn rt osztlyra, amelyet fltl megvltoztatni,
mert tl sok kls kd fggtt tle? Ha tesztekkel dolgozol, akkor nem kell tartani az ilyesmitl.
2. Rszvtel
Ha nylt forrskd szoftveren szeretnl dolgozni, valsznleg a kzssgi fejleszts vvmnyait is
fel szeretnd hasznlni a GitHubon . Egy id utn, msok is rszt szeretnnek venni, hogy javtsk a
hibkat, vagy j funkcionalitst adjanak hozz. Ha a projekted nem tartalmaz teszteket, s valaki pull
requestet kld, hogyan ellenrizhetnd, ellenrizhetnk, hogy nem trtnik semmi baj? A vlasz?
Nem - kivve, ha minden felhasznlsi forgatknyvet magad prblsz ki. Kinek van erre ideje
minden esetben?
A jl tesztelt projekt olyan, mint a kivlan mkd motor. Ha dolgozni szeretnl egy projekten,
csak nhny lpst kell tenned:
1.
2.
3.
4.
5.
A repo klnozsa
Teszt rsa, amely hibt generl (testThrowsExceptionIfUserNameDoesNotExist)
Vltoztasd meg a kdot, hogy a hiba eltnjn
Futtasd a tesztet, ha a kimenet zlden villog akkor (siker)
Git commit, s pull request klds
Van egy csom continuous integration szerviz, mint a Travis, amely automatikusan futtatja a
teszteket ha pull requestet kap . Ha a teszt nem sikerl, akkor a vltozs nem kerl elfogadsra.
https://travis-ci.org/
travis-ci.org
3. Felnttkorba lps
Ha egy kicsit eltrnk a tmtl, viszont tovbbra is a PHP kzssgrl beszlnk, a vlemnyem
az, hogy a WordPress olyan, mint egy ktl kard. Egyfell lehetv tette mindenkinek a bloggolst.
Ez egy letagadhatatlan, tisztelend tny. Knny r sablonokat kszteni a profiknak. Kszts
egy index.php fjlt, dobj be egy hurkot, amely elhvja a legjabb publikcikat, majd trdj a
megjelentssel. Mi lenne egyszerbb ennl?
Ez tulajdonkppen igaz. Ez mellett ltrehozott egy PHP fejleszti grdt, amely csak a Wordpressben
hajland rszt venni. Ennek a kvetkezmnye az lett, hogy modern mintk s technikk , mint a
teszt-vezrelt fejleszts, MVC, verzi kontroll, nagyjbl ismeretlenek szmukra. Ez a kellemetlen
igazsg kt mellkes esemnynek lett az alapja:
1. PHP kzssg a legtbb vitriolt a PHP 4 , s a WordPress kd miatt kapja.
2. A vlts a WordPresstl egy full-stack frameworkig, mint a Laravel, nagyon nehz lehet. Az
j mintk, s eszkzk hasznlatnak megtanulsa nem knny.
A WordPress felels ezrt? Igen is, meg nem is. Annyi azonban bizonyos: nem nagyon trtk
magukat a mestersg fejlesztsn. A tesztels 95%ban ignorlva van (ez persze csak egy kitallt
szm) az elrhet WordPress bvtmnyekben.
Vgl is mindenkinek fel kell nnie. Visszagondolhatunk a rgi kdolok, s kzben nem gondolkodok
praktikkra. Ne tervezz, gondolkozz, ne tesztelj; bele a kzepbe, hadd szljon, kzben pedig
llandan tltsd jra az oldalt, htha valami sikerl.
Mi jobbak vagyunk ennl. Mi fejlesztk vagyunk. Ne nzzenek pisztolyhsnek.
Egy rdekes vltozs trtnik, amikor gondolkodsz is mieltt kdolsz : a minsg azonnal javul. Ki
gondolta volna? Gyorsan rjssz, hogy a tesztels nem csak arra j, hogy megbizonyosodj, hogy
mkdik-e a kd. Amikor tesztelnk, hasznlunk egy osztlyt, vagy API-t mg mieltt megrtk
volna. Ez felszabadt, s nveli az olvashatsgot Mi lenne a legjobban olvashat mdszer, hogy
adatot kapjunk egy web szerviztl? rd ezt le, nzd, ahogyan a teszt megbukik, majd tedd rendbe.
gy mkdik!
5. Dokumentci
Hatalmas bnusz tesztrsnl, hogy dokumentcit biztost. Szeretnd tudni, hogy valamely osztly
mit is tesz? Nzd t a teszteket, ha rendesen neveztk el ket (ami azt jelenti, hogy lerjk a SUT-ot,
vagy tesztels alatt ll rendszert), semmi perc alatt rteni fogsz mindent!
6. Szrakoztat
Valljuk be : kockk vagyunk. Mely kocka nem szereti a j jtkot? Mellkhats a teszt-vezrelt
fejlesztsnek, hogy a munkt jtkk alaktja. Hogyan sznezem t a vrs kdot zldre? Menj vgig
minden lpsen, ameddig eljutsz a clig. Elszr butn hangzik, de grem: szrakoztat lesz. Magad
is meglthatod.
amely a legjabb csiripeket ssa el, s egy sidebarban jelenti meg ?Ha az egyetlen alternatva, hogy
megnyisd a Google Chrome-ot, s megnzd, akkor a vlasz IGEN.
A kellemetlen dolog, legalbbis az elejn, hogy a tesztelj mindent mantra tl sok munkt jelent.
Amgy is nehz megtanulni a tesztels mvszett, ezrt lassabban is lehet haladni. Kezd elszr
a modellekkel. Ha megy, akkor prblkozz a tbbi rsszel. Nyugdjasan. Megvan annak is mirtje,
mirt tanulunk meg elszr az ujjainkon szmolni.
Figyelmeztets:
Ez a tipp csak flig igaz. Mindennek tesztelse gynyr cl, de ltezik olyan kifejezs mint a
tl-tesztels (ezzel nem mindenki rt egyet). Egy nvekv rsze a kzssgnek gy tartja, hogy
korltozni kell a teszteket azokra a rszletekre, ahol legszksgesebb. Teht, ha ritkn hibzol,
accessorok s mutatorok rsnl, ne knldj a tesztelskkel. A teszteknek kell tgedet szolglniuk,
nem pedig fordtva.
A te feladatod, hogy megtanuld meghzni a hatrt . Meg kell tallni azt a pontot, amikor a
befektetett munka mr nem trl meg?
http://en.wikipedia.org/wiki/Diminishing_returns
6 A tesztelhetetlen kd jelei
A tesztels kicsit olyan, mint utazni egy olyan orszgban, ahol senki sem beszli a nyelvedet.
Ahogyan felfedezed a vidket, mintkat veszel majd szre. Rvid idn bell pedig folykonyan
kommuniklsz. Nem atomfizika, amelyrl beszlgetnk itt, mindenki megtanulhatja, aki akarja.
Csak nyomsts idt ignyel (Olvasd ezt a mondatot Morgan Freeman hangjn).
Ahogyan jobb s jobb leszel, knnyebben szreveszed a macers rszeket. sztnsen szre fogod
venni a hibs mintkat.
A legknnyebb t dolog, amikre oda kell figyelni:
1. New Opertorok
A tesztels alaptrvnye, hogy mindent izollva kell megfigyelni. Ezt az elkvetkez fejezetekben
mg mlyebben is megtrgyaljuk, de rviden az aktulis osztlyt kell tesztelni, semmi mst. Ne
kapcsoldj az adatbzishoz, ne teszteld, hogy a Filesystem osztly adatokat feccl valami web
szerviztl. Azoknak is kijr a sajt tesztjk, ne keverjk ket.
Mihelyt telerakod new opertorokkal az oszlyaidat, azonnal megszeged ezt a trvnyt. Emlkeztetlek: az osztly izollt tesztelse rviden azt jelenti, hogy ms objektumokat nem hozunk ltre a
kdrszletben.
10
Hibs minta:
1
2
3
4
6
7
Ez egy olyan eset, amikor a PHP nem olyan flexibilis, amennyire szeretnnk. Mg Ruby-ban
jranyithatjuk az osztlyt (ismeretes mint monkey-patching) s fellrhatjuk a metdusokat (amely
klnsen hasznos a tesztelsnl), PHP, sajnos nem engedi meg - legalbbis klnleges bvtmnyek
fordtsa nlkl. Ezrt, hasznlnunk kell egy technikt, amelyet dependency injectionnek hvnak.
gy jobb:
1
protected $file;
2
3
4
5
6
7
8
9
10
11
Ezzel a vltoztatssal , egy Filesystem osztlyt utnzunk, tesztelhetv tve a kdot. Ne zavartasd
magad, ha az albbi kdot nem rted. Nemsokra megtanulod majd a bels mkdst is! Egyenlre
olvasd t.
1
2
3
4
6
7
8
$this->assertEquals('foo', $data);
9
10
11
Az egyetlen eset, amikor egy osztlybl objektumot hozunk ltre egy msik oszlyban, ha az
objektum egy value-object, vagyis egy kontner getterekkel, s setterekkel, s semmilyen igazi
munkt nem vgez.
Tipp: Nem kell levadszni az sszes osztlyt , amely a new kulcsszavat tartalmazza.
2. Ellenrzsmnis konstruktorok
A konstruktor egyetlen dolga, hogy a fggsgeket meghatrozza. Ezt gy kell elkpzelni, mintha
az oszly azt krn Hozzjuthatnk a Filesystem osztlyhoz?
Ha ettl tbb trtnik, gondolkodj a vltoztatson.
Hibs minta:
1
2
3
4
$data = $this->file->get('http://example.com');
$this->write($data);
6
7
8
Javtva:
1
2
3
4
5
12
3. s
Elreltni, hogy milyen feladatokkal bzzuk meg az osztlyunkat nehz lehet elsre. Hallottuk eleget
az Egyetlen Feladat Trvnyt, de nehz ezt a gyakorlatban megvalstani.
13
Ha r akarunk jnni, vajon egy osztlynak jl jnne a polimorfizmus, akkor keresni kell a switch
lltsokat (vagy a tl sok felttelt). Kpzelj el egy bankszmla osztlyt, amelynek ki kell szmolnia
az vi kamatot a szmlatpustl fggen. Itt egy egyszerstett plda:
1
2
3
4
5
6
function addYearlyInterest($balance)
{
switch ($this->accountType) {
case 'checking':
$rate = $this->getCheckingInterestRate();
break;
case 'savings':
$rate = $this->getSavingsInterestRate();
break;
8
9
10
11
12
13
14
15
16
Hasonl esetben rtelmesebb megolds lenne ha a hasonl logikt kisebb osztlyok hasznlnk fel.
Definilj egy interfszt, hogy biztosan legyen egy getRate metdusod. Az interfszeket sokszor
szerzdsnek rjk le. Minden implementci a szerzdsnek megfelelen mkdik.
1
2
3
interface BankInterestInterface {
public function getRate();
}
14
Az eredeti metdus gy sokkal rthetbb. Az $interest vltoz tpusra elre utalunk . Ezzel
lehetetlenn vlik a getRate metdus hvsa, ha eredetileg nem definiltuk. Ezrt rtunk egy
interfszt. Minden implementcija az interfsznek tartalmaz egy getRate metdust.
1
2
3
5
6
7
8
9
10
Mg jobb az, hogy gy knnyebb tesztelni, hiszen a funkci csak egyetlen ton haladhat. Ne
idegeskedj a szintaxis miatt . Nemsokra azt is tvesszk.
1
2
3
4
6
7
8
$this->assertEquals(103, $newBalance);
9
10
15
5. Tl sok fggsg
Az *Ellenrzsmnis konstruktor * tippben , beszltnk arrl, hogy a fggsgeket a konstruktoron
keresztl kell meghatrozni. Ha olyasmit tapasztalsz, hogy egy osztly tl sokat kr, valsznleg
nincs minden rendben vele.
Mindig jragondolom egy osztly felptst, ha tbb mint ngy [fggsget tartalmaz]. - Taylor Otwell
Alapvet trvnyszersg az objektum-orientlt programozsban, hogy sszefggs van az osztly,
vagy metdus paramterei szmnak, illetve flexibilitsa kztt ( tesztelhetsg! ). Minden esetben,
amikor megszabadulsz egy paramtertl, vagy fggsgtl, javtsz a kdon.
Ha az osztlyod tl sok fggsget tartalmaz, rd jra.
6. Tl sok hiba
Egyszer hallottam Ben Orensteintl azt, hogy a hibk imdjk a trsasgot. Ez eddig a legigazabb
llts, amit eddig hallottam. Ha tl sokkal tallkozol egyetlen osztlyon bell, akkor ez egy
seglykilts alosztlyok s jrars utn. Gondoljunk csak bele: a hiba ltrejttnek egyik alapvet
oka az, hogy els alkalommal sem rtetted a kd ltal nyjtott megoldst; tl sszetett volt ! Tudod
mit? sszetett kd sokszor egyenl a tesztelhetetlen kddal. Ez aztn egy csom hibhoz vezet, s,
mint tudjuk, a baj nem jr egyedl.
Definci: Coupling -csatols- sz azt jelli, hogy a rendszerben kt komponens mennyire
fgg egymstl. Ha az egyik hinya hatssal van a msikra, akkor tightly coupled coderl
-ersen csatolt- beszlnk.
Ahogyan Ben mondta, ha hiba volt a hetedik sorban, akkor j esly van r, hogy gond lesz a
tizenegyedikben is. Vsd ezt a fejedbe.
Tipp: Ha hasonl hibkkal tallkozols, gondolkodj el arrl, hogyan lehetne kisebb (tesztelhet) osztlyokba pakolni a kdot. A kd nem csak tesztelhetbb lesz, de knnyebben lehet
majd olvasni.
16
Teszt zsargon
Annyira nem vagyok elszlva magamtl, hogy ebbl a knyvbl fogsz mindent megtanulni a
tesztelsrl (Legalbb is remnykedem). Ha hasonltunk, akkor ks jjel is a webet fogod bngszni
infk utn.
E kzben mindenfle zavar kifejezssel tallkozhatsz. Ettl mr csak az a rosszabb, hogy a
terminolgia minden nyelvben ms! Anym! Ebben a knyben az egyszersg szellemben
mindent a lehet legegyszerbben prblok magyarzni. Nzd t a kvetkez defincikat, de
most nem muszj megjegyezni ket. Az igazsg az, hogy nem szeretem a sok zsargont. Ha a sz
elsre nem jelent semmit, akkor meg kell vltoztatni. A fejlesztknek is lehet valamit tanulni az
asztrofizikusoktl.
A legrthetbb tudomny a nyelv szempontjbl, szerintem, az asztrofizika. What do
you call spots on the sun? Hogyan hvod a foltokat a Napon? Napfoltoknak. Azon
rszeit az rnek, ahova belezuhansz, s sosem jssz ki? Fekete lyukaknak. Nagy vrs
csillagokat? Vrs risnak. Adok egy feladatot kollegimnak. mond egy szt, ha
pedig megrtettem, azt mondom, , ez azt jelenti, hogy da-da-da-de-da? - Neil
Degrasse Tyson
Egysgtesztels
Gondolj az egysgtesztelsre, mintha egy finom fsvel mennl t minden osztlyon, s metduson,
hogy megbizonyosodj, minden megfelelen mkdik. Az egysgtesztelst izolciban kell vgezni,
hogy a hibakeress a lehet legegyszerbb legyen. 80% tesztjeidnek ilyen lesz.
Ha ez segt, ha az egysgtesztelsre gondolsz, mondogasd egy objektum, s csak egy objektum. Ha a
teszt nem sikerl, azonnal tudni fogod hol a hiba.
Modell Tesztels
Bizonyos Ruby on Rails kzssgi tagok modell tesztelsre gondolnak (mg akkor is ha a tesztek
adatbzisforgalommal jrnak) egysgtesztelskor. Ez egy kicsit csals lehet. Az egysgteszt izolltan
mkdik a kls fggsgektl. Ha ezt az alapvet szablyt nem tartjuk be , akkor mr nem
egysgtesztet hajtunk vgre. Ez ekkor mr integrcis teszt (errl nemsokra tbbet).
Ebben a knyvben, ha a modelleket teszteljk, ehhez a trvnyszersghez tartjuk magunkat .
Kpzeld el, hogy egy metdus a modelledben email kldsre val. Ha a megfelel mintt kveted,
akkor van egy csak az emailek kldsvel foglalkoz osztlyod (Egyetlen Felelssg Trvnye).
Ebben az esetben viszont egy gonddal szembeslnk: hogyan tesztelhetjk ezt a metdust, ha egy
kls Mailer osztlyt hv? Ekkor utnzsokat hasznlunk, amelyekrl mg sokat hallasz ebben
a knyvben. Egy hamis Mailer osztlyt hozunk ltre, s azt vrjuk, hogy a megfelel metdust
hvjk. gy, mg ha a Mailer komponens ebben a pillanatban nem mkdik (sajt tesztjei lesznek),
megbizonyosodhatunk arrl, hogy a modell gy mkdik, ahogyan elkpzeltk.
17
Integrci Tesztels
Ha az egysgteszt bizonytotta, hogy a komponens mkdik izolciban, az integrcis teszt ppen
az ellenkezje. Ezek a tesztek sok rszt prbljk ki az applikcinak, s alapveten nem hasznlnak
utnzatokat. Ilyenkor kszts egy erre a clra kijellt adatbzist.
Pldul egy aut. Mondjuk a motor s a tank kln-kln mkdik (tmentek az egysgteszten), de
tudnak-e egytt dolgozni? Az integrci tesztels erre val.
Elfogadsi teszt
Mr megtanultuk, hogy a funkcionlis tesztek arra jk, hogy a fejleszti grda elvrsai szerint
prbljuk ki a programot. Ennek ellenre, elfordulhat, hogy a teszt sikeres, viszont a kliens nincs
megelgedve az eredmnnyel. Ilyenkor van szerepe az elfogadsi tesztnek. Mskppen, ez a kd
megfelel -e a kliens elvrsainak? A program tmehet mindenfle egysg-, funkcionlis, integrcis
teszten , de megbukik az elfogadsin, mert a kliens rjtt, hogy nem minden gy van, ahogyan
elvrta.
Tipp: A funkcionlis tesztek a fejlesztk elvrsait igazoljk, az elfogadsiak pedig a
klienst.
http://tutsplus.com
18
Ha ez az elfogadsi teszt tmegy, akkor az egsz funkci teljessgben elfogadott, megfelel a kliens
(ebben az esetben a tartalmakrt felels csapat) elvrsainak.
A knyv vgn megtanulod, hogyan kell elfogadsi teszteket rni a Codeception keretrendszerrel.
Ezzel emberi nyelven definilhatjuk, hogyan kell mkdnie az applikcinak.
A tesztels kltsges?
Elterjedt nzet az, hogy a tesztek ugyan jl jnnek, de amikor igazi munkrl van sz, a kliens
pnztrcja szabja meg a hatrt.E szerint nincs az a kliens, aki megduplzn a fizetett sszeget a
nagyobb biztonsgrt.
Van ennek alapja? Nem. Sok tanulmny szl arrl, hogy a teszt-vezrelt fejleszts megrvidti az
ellltsi ciklust .
19
Nyugi
Be kell vallanom, hogy ezek a szavak, s technikk sokig idegenek voltak szmomra is. Nem
vrom el, hogy mindent rtsetek, s emlkezzetek rjuk. Nyugi; mg el sem jutottunk a Bevezets a
PHPUnitba fejezetig! Egyenlre meg kell jegyezni, hogy ameddig egy applikcit fejlesztesz sokfle
tesztelsi mdszert fogsz hasznlni.
A kellemetlen igazsg az, hogy a fejleszti kzssg csak nem tud megegyezni a terminolgin.
Ltni fogsz kifejezseket, mint rendszer teszt, krsi specifikcik, medium tesztek, s mg sok ms.
Legtbbszr, tfedsek vannak a fentebb emltett kifejezsek kztt. Ne zavarjon ez most tged; a
legfontosabb, hogy elkezdj tesztelni. Ki fogod alaktani a sajt stlusodat.
Ahogyan mondjk, mindegy hogyan tesztelsz ameddig tesztelsz.
Nem csak a terminolgival van gy . Mostansg a legtbb fejleszt elfogadja, hogy nagyon fontos
teszteket rni, viszont, ahogyan rjk ket, mr nagyon klnbzik. Bizonyos szemlyek, mint Bob
Martin (Uncle Bob), TDD filozfia szigor betartst ajnlja : egyetlen sor produkcis kdot se rj,
ameddig nem rtl tesztet r.
Lehetetlenn vlt egy szoftverfejleszt szmra, hogy profinak nevezze magt, ha nem
vgez teszt-vezrelt fejlesztst. - Bob Martin
Nmely, szintn prominens programozk, mint DHH (Ruby on Rails ltrehozja), nyugodtan
bevallja, hogy k a teszteket a produkcis kd utn rjk- gy 80 szzalkban.
Ne trd magad, hogy elzetesen tesztelj minden modellt, kontrollert, s nzetet (az n
egyenlegem 20% elzetes, 80% uttesztels). - David Heinemeier Hansson
A te munkd az, hogy a lehet legtbb helyrl szerezz informcit, majd alaktsd ki azt a stlust, amit
te (vagy a fejleszti csapat) kedvel. Ez a knyv nem Szentrs, sokkal inkbb sajtos adaptcija a
tesztelsnek, amelyet magadv tehetsz.
http://www.youtube.com/watch?feature=player_detailpage&v=KtHQGs3zFAM#t=77s
http://37signals.com/svn/posts/3159-testing-like-the-tsa