Adnotacja o testach

Adnotacje określają, jak biegacz testowy będzie obsługiwał testy z linii poleceń. Są one zapisywane na początku pliku testowego.

Adnotacje nie uwzględniają wielkości liter. Nie mają one również wpływu, jeśli test jest uruchamiany ręcznie jako zwykły skrypt PHP.

Przykład:

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

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

TEST

To nie jest właściwie adnotacja, po prostu określa tytuł testu, który jest drukowany na niepowodzeniach lub do dziennika.

@skip

Test jest pomijany. Dobre do tymczasowego odrzucania testów.

@phpVersion

Test zostanie pominięty, jeśli nie zostanie uruchomiony z odpowiednią wersją PHP. Adnotację zapisujemy jako. @phpVersion [operator] verze. Operator może być pominięty, domyślnie jest to >=. Przykłady:

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

@phpExtension

Test zostanie pominięty, jeśli nie zostaną załadowane wszystkie wymienione rozszerzenia PHP. Wiele rozszerzeń może być wymienionych w jednej adnotacji lub używanych wielokrotnie.

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

@dataProvider

Jeśli chcesz uruchomić plik testowy wiele razy, ale z różnymi danymi wejściowymi, ta adnotacja jest przydatna. (Nie należy mylić z tą samą adnotacją dla TestCase).

Zapisujemy go jako @dataProvider file.ini, ścieżka do pliku jest przyjmowana względem pliku testowego. Test zostanie uruchomiony tyle razy, ile jest sekcji w pliku INI. Załóżmy, że plik INI to 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:"

i w tym samym katalogu test database.phpt:

/**
 * @dataProvider databases.ini
 */

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

Test zostanie uruchomiony trzy razy, a $args zawsze będzie zawierał wartości z mysql, postgresql lub sqlite.

Istnieje również wariant, w którym zapisujemy adnotację ze znakiem zapytania jako @dataProvider? file.ini. W tym przypadku test zostanie pominięty, jeśli plik INI nie istnieje.

To nie koniec opcji związanych z adnotacjami. Po nazwie pliku INI możemy określić warunki, w jakich test będzie uruchamiany dla danej sekcji. Rozwiń plik 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:"

i użyć adnotacji o stanie:

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

Test zostanie przeprowadzony tylko raz dla odcinka postgresql 9.1. Pozostałe odcinki nie przejdą przez filtr warunków.

Podobnie możemy odwołać się do skryptu PHP zamiast do pliku INI. Musi to zwrócić tablicę lub Traversable. Plik databases.php:

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

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

@multiple

Zapisujemy ją jako @multiple N, gdzie N jest liczbą całkowitą. Test zostanie przeprowadzony dokładnie N razy.

@testCase

Adnotacja nie posiada żadnych parametrów. Używamy go, gdy piszemy testy jako klasy TestCase. W takim przypadku biegacz testowy linii poleceń uruchomi każdą metodę w oddzielnych procesach i równolegle w wielu wątkach. Może to znacznie przyspieszyć cały proces testowania.

@exitCode

Zapisujemy go jako @exitCode N, gdzie N je návratový kód spuštěného testu. Je-li v testu například voláno exit(10), adnotację zapisujemy jako @exitCode 10 i jeśli test zakończy się innym kodem, jest to traktowane jako niepowodzenie. Jeśli nie podano adnotacji, kod zwrotny jest walidowany jako 0 (zero).

@httpCode

Adnotacja jest stosowana tylko wtedy, gdy PHP jest binarnym CGI. W przeciwnym razie jest ignorowany. Zapisujemy go jako @httpCode NNN gdzie NNN to oczekiwany kod HTTP. Jeśli nie podano adnotacji, zatwierdzany jest kod HTTP 200. Jeśli NNN jest zapisany jako ciąg o wartości zero, na przykład any, kod HTTP nie jest weryfikowany.

@outputMatch i @outputMatchFile

Funkcja adnotacji jest identyczna jak w przypadku asercji Assert::match() i Assert::matchFile(). Jednak wzorzec jest szukany w tekście, który test wysłał na swoje standardowe wyjście. Jest to przydatne, jeśli spodziewamy się, że test zakończy się fatalnym błędem i musimy zatwierdzić jego wyjście.

@phpIni

Ustawia wartości INI konfiguracji dla testu. Na przykład piszemy go jako @phpIni precision=20 i działa tak samo, jakbyśmy wprowadzili wartość z linii poleceń poprzez parametr -d precision=20.