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.