TestCase
V jednoduchých testech mohou aserce následovat jedna za druhou. Někdy je ale výhodnější aserce zabalit do testovací třídy a tak je strukturovat.
Třída musí být potomkem Tester\TestCase
a zjednodušeně o ní mluvíme jako o testcase. Třída
musí obsahovat testovací metody začínající na test
. Tyto metody budou spuštěny jako testy:
Takto napsaný test lze dále obohatit o metody setUp()
a tearDown()
. Jsou volány před, resp. za
každou testovací metodou:
Pokud dojde k chybě v setUp()
nebo tearDown()
fázi, test celkově selže. Pokud dojde k chybě
v testovací metodě, i přes to se metoda tearDown()
spustí, avšak s potlačením chyb v ní.
Doporučujeme na začátek testu napsat anotaci @testCase, potom bude spouštěč testů z příkazové řádky pouštět jednotlivé metody testcase v samostatných procesech a paralelně ve více vláknech. To může výrazně urychlit celý proces testování.
Anotace metod
U testovacích metod máme k dispozici několik anotací, které nám testování usnadní. Zapisujeme je k testovací metodě.
@throws
Je ekvivalentem použití Assert::exception()
uvnitř testovací metody. Zápis je ale přehlednější:
@dataProvider
Chceme-li testovací metodu spustit vícekrát, ale s jinými parametry, hodí se právě tato anotace. (Nezaměňujte se stejnojmennou anotací pro soubory.)
Za ní uvedeme název metody, která vrací argumenty pro testovací metodu. Metoda musí vrátit pole nebo Traversable. Jednoduchý příklad:
Druhá varianta anotace @dataProvider přijímá jako parametr cestu k INI souboru (relativně k souboru s testem).
Metoda je volána tolikrát, kolik je v INI souboru sekcí. Soubor loop-args.ini
:
a metoda, která INI soubor využívá:
Obdobně můžeme namísto INI souboru odkázat na PHP skript. Ten musí vrátit pole nebo Traversable. Soubor
loop-args.php
: