Nette Documentation Preview

syntax
Teszt megjegyzések
******************

.[perex]
A megjegyzések határozzák meg, hogy a teszteket hogyan kezelje a [parancssori tesztfutó |running-tests]. 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:

```php
/**
 * TEST: Basic database query test.
 *
 * @dataProvider files/databases.ini
 * @exitCode 56
 * @phpVersion < 5.5
 */

require __DIR__ . '/../bootstrap.php';
```


TEST .[filter]
--------------
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 .[filter]
---------------
A teszt kihagyásra kerül. Praktikus a teszt ideiglenes kikapcsolásához.


@phpVersion .[filter]
---------------------
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:

```php
/**
 * @phpVersion 5.3.3
 * @phpVersion < 5.5
 * @phpVersion != 5.4.5
 */
```


@phpExtension .[filter]
-----------------------
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.

```php
/**
 * @phpExtension pdo, pdo_pgsql, pdo_mysql
 * @phpExtension json
 */
```


@dataProvider .[filter]
-----------------------
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 |TestCase#dataProvider] 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`:

```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ó:

```php
/**
 * @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:

```ini
[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:

```php
/**
 * @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`:

```php
return [
	'postgresql 8.4' => [
		'dsn' => '...',
		'user' => '...',
	],

	'postgresql 9.1' => [
		'dsn' => '...',
		'user' => '...',
	],
];
```


@multiple .[filter]
-------------------
Ezt a következőképpen írjuk: `@multiple N`, ahol `N` egy egész szám. A teszt pontosan N-szer fut le.


@testCase .[filter]
-------------------
Az annotációnak nincsenek paraméterei. Akkor használjuk, amikor egy tesztet [TestCase |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 .[filter]
-------------------
Í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 .[filter]
-------------------
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 .[filter]
-----------------------------------------
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 .[filter]
-----------------
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.

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.