Teszt megjegyzések
A megjegyzések határozzák meg, hogy a teszteket hogyan kezelje a parancssori tesztfutó. A tesztfájl elejére íródnak.
A megjegyzések nem érzékenyek a nagy- és kisbetűkre. Nincs hatásuk akkor sem, ha a tesztet kézzel, hagyományos PHP szkriptként futtatjuk.
Példa:
/**
* TEST: Basic database query test.
*
* @dataProvider files/databases.ini
* @exitCode 56
* @phpVersion < 5.5
*/
require __DIR__ . '/../bootstrap.php';
TEST
Ez valójában nem egy megjegyzés. Csak a teszt címét állítja be, amely a hiba esetén vagy a naplókba kerül kiírásra.
@skip
A teszt kihagyásra kerül. Praktikus a teszt ideiglenes kikapcsolásához.
@phpVersion
A teszt kihagyásra kerül, ha nem a megfelelő PHP-verzióval fut. A megjegyzést a következőképpen írjuk
@phpVersion [operator] version
. Az operátort elhagyhatjuk, alapértelmezett a >=
. Példák:
/**
* @phpVersion 5.3.3
* @phpVersion < 5.5
* @phpVersion != 5.4.5
*/
@phpExtension
A teszt kihagyásra kerül, ha az összes említett PHP-bővítmény nincs betöltve. Több kiterjesztést is írhatunk egyetlen annotációba, vagy többször is használhatjuk az annotációt.
/**
* @phpExtension pdo, pdo_pgsql, pdo_mysql
* @phpExtension json
*/
@dataProvider
Ez az annotáció akkor illik, ha a tesztet többször, de különböző adatokkal szeretnénk lefuttatni. (Nem tévesztendő össze a TestCase azonos nevű annotációjával.)
Az annotációt úgy írjuk, hogy @dataProvider file.ini
. Az INI fájl elérési útja a tesztfájlhoz képest
relatív. A teszt annyiszor fut le, ahány szakasz található az INI fájlban. Tegyük fel, hogy az INI fájl
databases.ini
:
[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 a database.phpt
fájl ugyanabban a könyvtárban található:
/**
* @dataProvider databases.ini
*/
$args = Tester\Environment::loadData();
A teszt háromszor fut le, és a $args
tartalmazni fogja a mysql
, postgresql
vagy
sqlite
szakaszok értékeit.
Van még egy variáció, amikor kérdőjellel írunk megjegyzéseket, mint @dataProvider? file.ini
. Ebben az
esetben a teszt kihagyásra kerül, ha az INI fájl nem létezik.
Az összes megjegyzési lehetőséget még nem említettük. Az INI fájl után feltételeket is írhatunk. A teszt csak akkor fut le az adott szakaszra, ha minden feltétel megfelel. 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áljuk a feltételes megjegyzést:
/**
* @dataProvider databases.ini postgresql, >=9.0
*/
A teszt csak egyszer fut le a postgresql 9.1
szakaszra. A többi szakasz nem felel meg a feltételeknek.
Hasonlóképpen, INI helyett átadhatjuk egy PHP-szkript elérési útvonalát is. Ennek tömböt vagy Traversable-t kell
visszaadnia. Fájl databases.php
:
return [
'postgresql 8.4' => [
'dsn' => '...',
'user' => '...',
],
'postgresql 9.1' => [
'dsn' => '...',
'user' => '...',
],
];
@multiple
Ezt a következőképpen írjuk: @multiple N
, 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, amikor egy tesztet TestCase osztályokként írunk. Ebben az esetben a parancssori tesztfutó az egyes metódusokat külön folyamatokban és párhuzamosan, több szálban fogja futtatni. Ez jelentősen felgyorsíthatja a teljes tesztelési folyamatot.
@exitCode
Írjuk @exitCode N
néven, ahol a tesztben a N
is the exit code of the test. For example if
exit(10)
meghívásra kerül, ott az annotációt @exitCode 10
néven írjuk. Sikertelennek tekintjük,
ha a teszt más kóddal végződik. A 0 (nulla) kilépési kódot akkor ellenőrizzük, ha elhagyjuk a megjegyzést.
@httpCode
A megjegyzés csak akkor kerül kiértékelésre, ha a PHP bináris CGI. Ellenkező esetben figyelmen kívül hagyja. Ezt
@httpCode NNN
-ként írjuk, ahol a NNN
a várt HTTP-kód. A 200-as HTTP-kódot akkor ellenőrizzük,
ha elhagyjuk a megjegyzést. Ha a NNN
karakterláncot nullaként értékelt karakterláncként írjuk, például
any
, a HTTP-kódot egyáltalán nem ellenőrzi.
@outputMatch a @outputMatchFile
Az annotációk viselkedése összhangban van a Assert::match()
és a Assert::matchFile()
állításokkal. De a minta megtalálható a teszt standard kimenetén. Megfelelő felhasználási eset, amikor feltételezzük,
hogy a teszt végzetes hibával ér véget, és ellenőriznünk kell a kimenetét.
@phpIni
A teszt INI konfigurációs értékeit állítja be. Például a @phpIni precision=20
címre írjuk, és
ugyanúgy működik, mintha a parancssorból adnánk át értéket a -d precision=20
paraméterrel.