2019/11/12
PHPUnitとは、PHPのテスティングツールで、PHPの単体テストを行うときにはよく利用されます。
Laravelは標準でPHPUnitが実装されているので、何もしなくても最初から使えるようになっています。(※composer.jsonにすでに記述されています。)
今回はこのPHPUnitを使ってLaravelで単体テストを行ってみます。
演習
まずは、Laravelでの単体テストがどんなものか、感覚を知るために簡単なテスト内容を実行してみます。
今回のテスト内容はHTTPリクエストを送り、結果をテストするだけのテストを実行します。
手順
Artisanコマンドでスケルトンの作成
artisanコマンドでテストファイルのスケルトンを作成します。
php artisan make:test PracticeTest
解説
テストファイルの場所
Laravelでのテストファイルの場所はプロジェクト直下にあるtestsディレクトリ
に置きます。先ほどのArtisanコマンドを打つと、このディレクトリにテストファイルが自動生成されます。
テストファイルの命名規則
アッパーキャメルケースでファイル名をつけます。
コーディング
artisanコマンドで自動生成されたテストファイルにテストしたい内容をコーディングします。
public function testExample()
{
$response = $this->call('GET','/');
$this->assertEquals(200, $response->getStatusCode());
}
解説
$this->call
Laravelではユニットテストの中でルートを呼び出すのは簡単で、call
メソッドを使用します。
// 構文
$response = $this->call($method , $uri , $parameters , $files , $server , $content);
// 実例
$response = $this->call('GET', 'user/profile');
$this->call()
で呼び出されるresponseオブジェクトのメソッドは「getStatusCode()」「getContent()」「getData()」などあります。
assertEquals
PHPUnitには $this->assert~~ という名前のメソッドが多数存在し、いろいろなテストができるようになっています。
assertEquals
は PHPUnit で使われるAssertメソッドの一つです。
第一引数と第二引数が等しいかどうかをチェックします。
その他のAssertメソッドは以下をご覧ください。
LaravelからもPHPUnitテスト用に数多くの追加アサートメソッドを提供しています。
Laravel5.5以上からはLaravelで提供しているアサートメソッドがさらに数多く追加されました。
今回のケースではassertStatus
メソッドが使えそうですね。
実行
実行はコマンドプロンプト/ターミナルで行います。
./vendor/bin/phpunit tests/PracticeTest.php
実際のテストではWebAPIのテストやDBのテストが多いかなと思います。
今回は簡単なテストを実行しましたが、まずはPHPUnitとはどんなものかを理解できたらOKかなと思います。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。