Opombe testov

Opombe določajo, kako bo teste obravnaval zaganjalnik testov iz ukazne vrstice. Zapisujejo se na začetek datoteke s testom.

Pri opombah se velikost črk ne upošteva. Prav tako nimajo vpliva, če se test zažene ročno kot običajen skript PHP.

Primer:

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

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

TEST

To pravzaprav sploh ni opomba, ampak samo določa naslov testa, ki se izpiše ob neuspehu ali v dnevnik.

@skip

Test se preskoči. Uporabno za začasno izključitev testov.

@phpVersion

Test se preskoči, če ni zagnan z ustrezno različico PHP. Opombo zapišemo kot @phpVersion [operator] različica. Operator lahko izpustite, privzeti je >=. Primeri:

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

@phpExtension

Test se preskoči, če niso naložene vse navedene razširitve PHP. Več razširitev lahko navedete v eni opombi ali jo uporabite večkrat.

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

@dataProvider

Če želite testno datoteko zagnati večkrat, vendar z drugačnimi vhodnimi podatki, je uporabna prav ta opomba. (Ne zamenjujte z istoimensko opombo za TestCase.)

Zapišemo kot @dataProvider file.ini, pot do datoteke se jemlje relativno glede na datoteko s testom. Test se bo zagnal tolikokrat, kolikor je odsekov v datoteki INI. Predpostavimo datoteko INI 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:"

in v istem imeniku test database.phpt:

/**
 * @dataProvider databases.ini
 */

$args = Tester\Environment::loadData();

Test se bo zagnal trikrat in $args bo vedno vseboval vrednosti iz odseka mysql, postgresql ali sqlite.

Obstaja še različica, ko opombo zapišemo z vprašajem kot @dataProvider? file.ini. V tem primeru se test preskoči, če datoteka INI ne obstaja.

S tem možnosti opombe še niso izčrpane. Za ime datoteke INI lahko določite pogoje, pod katerimi se bo test za dani odsek zagnal. Razširimo datoteko 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:"

in uporabimo opombo s pogojem:

/**
 * @dataProvider  databases.ini  postgresql, >=9.0
 */

Test se bo zagnal samo enkrat in sicer za odsek postgresql 9.1. Drugi odseki ne bodo šli skozi filter pogoja.

Podobno lahko namesto datoteke INI pokažete na skript PHP. Ta mora vrniti polje ali Traversable. Datoteka databases.php:

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

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

@multiple

Zapišemo kot @multiple N, kjer je N celo število. Test se bo zagnal natanko N-krat.

@testCase

Opomba nima parametrov. Uporabite jo, če teste pišete kot razrede TestCase. V tem primeru bo zaganjalnik testov iz ukazne vrstice zaganjal posamezne metode v ločenih procesih in vzporedno v več nitih. To lahko znatno pospeši celoten proces testiranja.

@exitCode

Zapišemo kot @exitCode N, kjer je N izhodna koda zagnanega testa. Če je v testu na primer klicano exit(10), opombo zapišemo kot @exitCode 10 in če se test konča z drugo kodo, se to šteje za neuspeh. Če opombe ne navedete, se preveri izhodna koda 0 (nič).

@httpCode

Opomba se uporabi samo, če je izvedljiva datoteka PHP CGI. Sicer se ignorira. Zapišemo kot @httpCode NNN, kjer je NNN pričakovana koda HTTP. Če opombe ne navedete, se preverja koda HTTP 200. Če NNN zapišete kot niz, ki se ovrednoti na nič, na primer any, se koda HTTP ne preverja.

@outputMatch in @outputMatchFile

Funkcija opomb je enaka asercijam Assert::match() in Assert::matchFile(). Vzorec (pattern) pa se išče v besedilu, ki ga je test poslal na svoj standardni izhod. Uporabo najde, če predpostavljate, da se bo test končal s fatalno napako in morate preveriti njegov izhod.

@phpIni

Za test nastavi konfiguracijske vrednosti INI. Zapišemo na primer kot @phpIni precision=20 in deluje enako, kot če bi vrednost vnesli iz ukazne vrstice prek parametra -d precision=20.