テストアノテーション
アノテーションは、テストが コマンドラインテストランナー によってどのように扱われるかを決定します。これらはテストファイルの先頭に記述されます。
アノテーションでは大文字と小文字は区別されません。また、テストが通常の PHP スクリプトとして手動で実行される場合、何の効果もありません。
例:
/**
* TEST: Basic database query test.
*
* @dataProvider files/databases.ini
* @exitCode 56
* @phpVersion < 5.5
*/
require __DIR__ . '/../bootstrap.php';
TEST
これは実際にはアノテーションではなく、失敗時またはログに出力されるテストのタイトルを指定するだけです。
@skip
テストはスキップされます。テストを一時的に無効にするのに役立ちます。
@phpVersion
対応する PHP
バージョンで実行されていない場合、テストはスキップされます。アノテーションは
@phpVersion [operator] version
として記述します。演算子は省略でき、デフォルトは
>=
です。例:
/**
* @phpVersion 5.3.3
* @phpVersion < 5.5
* @phpVersion != 5.4.5
*/
@phpExtension
リストされているすべての PHP 拡張機能が読み込まれていない場合、テストはスキップされます。1 つのアノテーションに複数の拡張機能をリストするか、複数回使用できます。
/**
* @phpExtension pdo, pdo_pgsql, pdo_mysql
* @phpExtension json
*/
@dataProvider
テストファイルを複数回実行したいが、異なる入力データで実行したい場合、このアノテーションが役立ちます。(TestCase の同名のアノテーションと混同しないでください。)
@dataProvider file.ini
として記述します。ファイルへのパスはテストファイルからの相対パスと見なされます。テストは
INI ファイル内のセクションの数だけ実行されます。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:"
そして、同じディレクトリにあるテスト database.phpt
:
/**
* @dataProvider databases.ini
*/
$args = Tester\Environment::loadData();
テストは 3 回実行され、$args
には常に mysql
、postgresql
、または
sqlite
セクションの値が含まれます。
アノテーションを疑問符付きで @dataProvider? file.ini
として記述するバリアントもあります。この場合、INI
ファイルが存在しない場合、テストはスキップされます。
アノテーションの可能性はこれで終わりではありません。INI ファイル名の後に、特定のセクションに対してテストが実行される条件を指定できます。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:"
そして、条件付きのアノテーションを使用します。
/**
* @dataProvider databases.ini postgresql, >=9.0
*/
テストは postgresql 9.1
セクションに対して 1
回だけ実行されます。他のセクションは条件フィルタを通過しません。
同様に、INI ファイルの代わりに PHP スクリプトを参照できます。これは配列または Traversable
を返す必要があります。ファイル databases.php
:
return [
'postgresql 8.4' => [
'dsn' => '...',
'user' => '...',
],
'postgresql 9.1' => [
'dsn' => '...',
'user' => '...',
],
];
@multiple
@multiple N
として記述します。ここで N
は整数です。テストは正確に N
回実行されます。
@testCase
アノテーションにはパラメータがありません。TestCase クラスとしてテストを作成する場合に使用します。この場合、コマンドラインテストランナーは個々のメソッドを個別のプロセスで並行して複数のスレッドで実行します。これにより、テストプロセス全体が大幅に高速化される可能性があります。
@exitCode
@exitCode N
として記述します。ここで N
は実行されたテストのリターンコードです。たとえば、テストで exit(10)
が呼び出された場合、アノテーションを @exitCode 10
として記述し、テストが別のコードで終了した場合、それは失敗と見なされます。アノテーションが指定されていない場合、リターンコード
0(ゼロ)が検証されます。
@httpCode
アノテーションは、PHP バイナリが CGI
の場合にのみ適用されます。それ以外の場合は無視されます。@httpCode NNN
として記述します。ここで NNN
は期待される HTTP
コードです。アノテーションが指定されていない場合、HTTP コード 200
が検証されます。NNN
がゼロに評価される文字列、たとえば any
として記述された場合、HTTP コードは検証されません。
@outputMatch および @outputMatchFile
アノテーションの機能は、アサーション Assert::match()
および Assert::matchFile()
と同じです。ただし、パターンはテストが標準出力に出力したテキスト内で検索されます。これは、テストが致命的なエラーで終了すると予想され、その出力を検証する必要がある場合に役立ちます。
@phpIni
テストの INI 設定値を設定します。たとえば、@phpIni precision=20
として記述し、コマンドラインからパラメータ -d precision=20
を介して値を指定した場合と同じように機能します。