以前、WordPressの関数やクエリにも対応させたPHPUnitの導入方法をメモとして残しておいた。
【続】PHPUnitテストを「WordPress Test Suite」を使ってWPでも動かす
今回はその応用というか、PHPUnitを動かすためのお作法的なルールや実行するコマンド、テスト内容(メソッド)の種類などをメモしておく。
Table of Contents
テスト方法
PHPUnitではテストを実行する際に様々なオプションを付けれる。
例えば特定のファイルのメソッドだけを単体でテストするとか、すべてのファイルの中身をテストするとか。
・/test内のファイルをすべてテスト
vendor/bin/phpunit
・特定のファイルだけテスト
vendor/bin/phpunit tests/ConfigTest.php
・特定のメソッドだけテスト(単体テスト)
vendor/bin/phpunit --filter category_exists
・特定クラスだけ
vendor/bin/phpunit --filter CategoryTestテストメソッド一覧
PHPUnitが持っているメソッド(Assertions)も重要だ。
PHPUnitには 大量の assert メソッドがあり、「実際の結果」が「期待する結果」と一致するか確認する
もっと言うと、テストしたいプログラムの戻り値や戻り値以外のテストも可能となる。
よく使うものメソッドは下記のとおりだ。
assertTrue() trueか
assertFalse() falseか
assertEquals() 値が同じ
assertSame() 型も含め完全一致
assertNull() nullか
assertIsArray() 配列か
assertIsString() 文字列か
assertCount() 要素数
assertArrayHasKey() 配列キー存在
assertInstanceOf() クラス型これらはプログラムの結果がどんな型なのかを把握しておく必要があるだろう。
PHPUnitの仕様メモ
ここからはPHPUnitテストのルールや自分が躓いたカ所を箇条書きでメモしておく。
- ・ユニットテストは「お作法(規約)」に沿って書く文化が強い
- ・pupunite.xmlに記載の通り、「~~Test.php」で終わるファイルのみ実行される
→ 合わせなきゃ全体テスト(vendor/bin/phpunit)でエラー出る
→ ファイル単体テストならパスする - ・テストのクラス名はファイル名に合わせる
→ 合わせなきゃファイル単体テストでエラー出る
→ 全体テストならパスする - ・テストクラス内のメソッドは「test_」を付けないとテストとして認識されない
public function test_get_〇〇() {} - ・echoは戻り値ではないので、出力バッファでないと検証できない
- ・ユニットテストは通常STGではなく、ローカル環境にて行うのが鉄則
今自分は、このWP向けユニットテストはプラグインみたいにパッケージ化できないを検討している。
近いうちにGithubには上げたいなと思う。