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.