PHPUnitを使う上で知っておきたい用語や知識などについて解説します。データプロバイダ、フィクスチャなど聞きなれない用語があるかもしれませんが、よく活用するので押さえておきましょう。
テストに関する一般知識
TDD(テスト駆動開発)
まずテストを書く開発スタイルです。「赤(失敗)、緑(成功)、リファクタリング(成功を保つ)」の順で開発します。
ユニットテスト
ある入力値で関数を呼び出し、その結果(出力内容や動作)が正しいか判定します。
モック、スタブ
テスト用に用意した代替品です。
次のような時に利用します。
- まだ完成していない部品を使うとき。
- 「本物」でテストしたくないとき(DBを使いたくない時など)。
スタブ
モジュールの代わりとしてコールされ、テストケースにあった戻り値を返します。
モック
あるオブジェクトのメソッドがコールされたのかどうか、さらにどんな引数を渡してコールされたのかを検証するのに利用します。
テスト対象のメソッドを呼び出したとき、テスト対象のメソッド内で
あるオブジェクトのどういったメソッドが、
何回、
どういった引数で呼ばれることを期待しているのかを検証。
また、モックは、スタブ機能(下位モジュールの代わりに戻り値を返す)も持ちます。
PHPUnitに関する知識
テストクラス名
テスト対象クラス名Test
という名前のクラスにします。例えば、テスト対象クラス名が User
の場合、テストクラス名は UserTest
とします。
テストメソッド名
テストメソッドであることを示すには、2通りの方法があります。
- メソッド名に
test
という接頭辞をつける。 @testアノテーション
を利用する。
アサーション
条件判定用メソッドです。
アサーションメソッドを利用して、以下のような判定を行います。
- メソッドの戻り値の「型」や「内容」の判定
- メソッドを実行したことによる状態変化(DB、セッション、キャッシュ、ログなど)の判定
アサーションメソッド | 概要 |
---|---|
assertEquals($exp, $act) | $expと$actが等しい(==) |
assertSame($exp, $act) | $expと$actが等しい(===) |
assertNotEquals($exp, $act) | $expと$actが等しくない |
assertContains(mixed $needle, Iterator | array $haystack) |
assertArrayHasKey(mixed $key, array $array) | 配列にキーが含まれている |
assertTrue($cond) | $condがTRUE |
assertFalse($cond) | $condがFALSE |
assertNull($var) | $varがNULL |
assertNotNull($var) | $varがNULLではない |
assertInternalType($type, $act) | $actの型が$typeと一致する |
assertInstanceOf($expected, $actual) | $actualが$expectedのインスタンスである |
この他のアサーションは、下記リンクから確認できます。
⇒ https://phpunit.de/manual/5.5/ja/appendixes.assertions.html
いろいろありますが、使うのは限られるかと思います。
例外テスト
正しく例外がスローされたかどうかを判定します。@expectedExceptionアノテーション
など利用します。
テスト依存性
あるテストの結果をもとに、別のテストを実施することができます。@dependsアノテーション
を利用します。
データプロバイダ
複数のテストデータパターンでテストできます。@dataProviderアノテーション
を利用します。
フィクスチャ
- setUpメソッド
- テスト実行前に実行されるメソッドです。
- tearDownメソッド
- テスト実行後に実行されるメソッドです。
リフレクション
プライベートメソッドを外部アクセス可能にしてくれます。ReflectionMethodクラス
を利用します。
XML設定ファイル
テスト設定ファイルです。例えば、次のような設定が可能です。
設定 | 概要 |
---|---|
colors | 結果を色表示するか指定 |
bootstrap | テスト前に実行させるPHPファイルを指定 |
stopOnFailure | あるテストに失敗したら残りのテストはキャンセルするか指定 |
testsuite | どのディレクトリにテストが存在するかなど指定 |
この他の設定は、下記リンクから確認できます。
⇒ https://phpunit.de/manual/5.5/ja/appendixes.configuration.html
XML設定ファイルは、phpunitコマンドの--configurationオプション
で指定できます。
phpunit --configuration XML設定ファイル
--configurationオプション
を指定しない場合、カレントディレクトリから phpunit.xml
phpunit.xml.dist
を順に探し、存在する場合はそれを自動的に読み込みます。
コードカバレッジ
- ユニットテスト実行時、テスト対象プログラムの処理がどの程度実行されたかを表します。
- Xdebugを有効にする必要があります。なのでテスト実行時間が長くなります。
- コマンドラインのオプションで出力形式を指定できます。
- XML設定ファイルにて、コードカバレッジ対象ファイルを指定できます。
用語整理
用語関連の整理のため、おおまかなイメージ図を示します。「Xxx」クラスに対するテストクラスとして、「XxxTest」クラスを示してます。
参考
PHPUnitの詳しい使い方については、https://phpunit.de/manual/5.5/ja/index.html で確認できます。