Teszt annotációk
Az annotációk határozzák meg, hogyan kezelje a teszteket a parancssori tesztfuttató. A tesztfájl elejére íródnak.
Az annotációknál nem számít a kis- és nagybetűk mérete. Nincs hatásuk sem, ha a tesztet manuálisan futtatják, mint egy szokásos PHP szkriptet.
Példa:
/**
* TEST: Alapvető adatbázis-lekérdezési teszt.
*
* @dataProvider files/databases.ini
* @exitCode 56
* @phpVersion < 5.5
*/
require __DIR__ . '/../bootstrap.php';
TEST
Ez valójában nem is annotáció, csupán a teszt címét határozza meg, amely hiba esetén vagy a naplóba íródik ki.
@skip
A teszt kihagyásra kerül. Hasznos a tesztek ideiglenes kikapcsolására.
@phpVersion
A teszt kihagyásra kerül, ha nem a megfelelő PHP verzióval futtatják. Az annotációt
@phpVersion [operator] verzió
formában írjuk. Az operátort elhagyhatjuk, az alapértelmezett >=
.
Példák:
/**
* @phpVersion 5.3.3
* @phpVersion < 5.5
* @phpVersion != 5.4.5
*/
@phpExtension
A teszt kihagyásra kerül, ha nem töltődnek be az összes megadott PHP kiterjesztés. Több kiterjesztést is megadhatunk egy annotációban, vagy használhatjuk többször is.
/**
* @phpExtension pdo, pdo_pgsql, pdo_mysql
* @phpExtension json
*/
@dataProvider
Ha a tesztfájlt többször szeretnénk futtatni, de más bemeneti adatokkal, akkor ez az annotáció hasznos. (Ne keverjük össze az azonos nevű annotációval a TestCase számára.)
@dataProvider file.ini
formában írjuk, a fájl elérési útja a tesztfájlhoz képest relatív. A teszt
annyiszor fut le, ahány szekció van az INI fájlban. Tegyük fel, hogy van egy databases.ini
INI fájlunk:
[mysql]
dsn = "mysql:host=127.0.0.1"
user = root
password = ******
[postgresql]
dsn = "pgsql:host=127.0.0.1;dbname=test"
user = postgres
password = ******
[sqlite]
dsn = "sqlite::memory:"
és ugyanabban a könyvtárban a database.phpt
teszt:
/**
* @dataProvider databases.ini
*/
$args = Tester\Environment::loadData();
A teszt háromszor fut le, és az $args
mindig a mysql
, postgresql
vagy
sqlite
szekció értékeit fogja tartalmazni.
Létezik még egy változat, amikor az annotációt kérdőjellel írjuk, mint @dataProvider? file.ini
. Ebben az
esetben a teszt kihagyásra kerül, ha az INI fájl nem létezik.
Ezzel az annotáció lehetőségei nem érnek véget. Az INI fájl neve után megadhatunk feltételeket, amelyek mellett a teszt az adott szekcióhoz fut le. Bővítsük ki az INI fájlt:
[mysql]
dsn = "mysql:host=127.0.0.1"
user = root
password = ******
[postgresql 8.4]
dsn = "pgsql:host=127.0.0.1;dbname=test"
user = postgres
password = ******
[postgresql 9.1]
dsn = "pgsql:host=127.0.0.1;dbname=test;port=5433"
user = postgres
password = ******
[sqlite]
dsn = "sqlite::memory:"
és használjunk annotációt feltétellel:
/**
* @dataProvider databases.ini postgresql, >=9.0
*/
A teszt csak egyszer fut le, és csak a postgresql 9.1
szekcióhoz. A többi szekció nem megy át a feltétel
szűrőjén.
Hasonlóképpen, INI fájl helyett hivatkozhatunk PHP szkriptre is. Ennek tömböt vagy Traversable-t kell visszaadnia.
databases.php
fájl:
return [
'postgresql 8.4' => [
'dsn' => '...',
'user' => '...',
],
'postgresql 9.1' => [
'dsn' => '...',
'user' => '...',
],
];
@multiple
@multiple N
formában írjuk, ahol N
egy egész szám. A teszt pontosan N-szer fut le.
@testCase
Az annotációnak nincsenek paraméterei. Akkor használjuk, ha a teszteket TestCase osztályokként írjuk. Ebben az esetben a parancssori tesztfuttató az egyes metódusokat külön folyamatokban és párhuzamosan, több szálon futtatja. Ez jelentősen felgyorsíthatja az egész tesztelési folyamatot.
@exitCode
@exitCode N
formában írjuk, ahol N
a futtatott teszt visszatérési értéke. Ha a tesztben
például exit(10)
hívás van, az annotációt @exitCode 10
-ként írjuk, és ha a teszt más kóddal
fejeződik be, az hibának minősül. Ha az annotációt nem adjuk meg, a 0 (nulla) visszatérési érték kerül
ellenőrzésre.
@httpCode
Az annotáció csak akkor érvényesül, ha a PHP bináris CGI. Egyébként figyelmen kívül hagyódik.
@httpCode NNN
formában írjuk, ahol NNN
a várt HTTP kód. Ha az annotációt nem adjuk meg, a
200 HTTP kód kerül ellenőrzésre. Ha az NNN
-t nullára kiértékelődő stringként írjuk, például
any
, a HTTP kód nem kerül ellenőrzésre.
@outputMatch és @outputMatchFile
Az annotációk funkciója megegyezik az Assert::match()
és Assert::matchFile()
asszerciókéval.
A minta (pattern) azonban abban a szövegben keresendő, amelyet a teszt a standard kimenetére küldött. Akkor hasznos, ha
feltételezzük, hogy a teszt fatális hibával ér véget, és ellenőriznünk kell annak kimenetét.
@phpIni
A teszthez beállítja a konfigurációs INI értékeket. Például @phpIni precision=20
formában írjuk, és
ugyanúgy működik, mintha a parancssorból adtuk volna meg az értéket a -d precision=20
paraméterrel.