【Laravel】5分でユニットテスト実行環境を作成する Unit Test

こんにちは。今回はLaravelでユニットテストを作成し、実行するまでの手順を解説していきます。

ユニットテストの環境準備

Laravelをインストールした状態でphpunitによるユニットテストの実行環境は整っている状態ですので、即テストの実行が可能です。インストール直後はtestフォルダにfeature,unitの2つのディレクトリが作られており、その中にExampleTestがサンプルとして作成されています。試しにExampleTestを実行してみましょう。テストを実行するにはLaravelのインストールディレクトリでvendor/bin/phpunitを実行します。

$ vendor/bin/phpunit

PHPUnit 9.5.6 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 00:00.379, Memory: 20.00 MB

OK (2 tests, 2 assertions)

OK( 2tests, 2 assetions)が表示されれば、テストは正常に実行できています。

このとき、MissingAppKeyExceptionが出る場合は、以下のコマンドを実行し、再度テストを実行してください。

$ php artisan key:generate 

ユニットテストを作成する

テストの雛形を作成する

テストの実行環境が整ったところで、ユニットテストを作成してみましょう。テストの雛形はphp artisan make:testコマンドで簡単に作ることができます。testsフォルダにはfeature,unitの2つのフォルダがあります。今回はunitフォルダに作成したいので–unitオプションを付与して実行します。

php artisan make:test SampleTest --unit

tests/unitフォルダにSampleTest.phpファイルが作成されます。作成されたファイルの中身は以下です。

<?php

namespace Tests\Unit;

use PHPUnit\Framework\TestCase;

class SampleTest extends TestCase
{
    /**
     * A basic unit test example.
     *
     * @return void
     */
    public function test_example()
    {
        $this->assertTrue(true);
    }
}

test_exampleメソッドが一つ用意されています。

テストを実行する

作成したテストを実行してみましょう。先程はvendor/bin/phpunitを叩いていましたが、今回はartisan testコマンドで実行します。こちらの方がより細かなテスト結果を出力するのでおすすめです。それでは実行してみましょう。

$ php artisan test

   PASS  Tests\Unit\ExampleTest
  ✓ example

   PASS  Tests\Unit\SampleTest
  ✓ example1

   PASS  Tests\Feature\ExampleTest
  ✓ example

  Tests:  3 passed
  Time:   0.46s

Testsフォルダに存在するテストメソッドがすべて実行されました。

テストメソッドを追加する

先程作成SampleTest.phpにはデフォルトでtest_exampleメソッドが1つだけ作成されていました。テストメソッドはクラス内に複数作ることができるので追加してみましょう。test_exampleをコピーしてtest_example2を作成してみてください。テストを実行すると作成したtest_example2も実行されるはずです。このようにテストメソッドは簡単に追加することができます。

テストメソッドを作成する上で注意点があります。メソッドの名前はtest_で開始しなくてはなりません。この命名規約に沿わないものはtestメソッドとして認識されません。逆にこの性質を利用してクラス内に共通処理のメソッドを書くこともできます。覚えておきましょう。

まとめ

今回は、Laravelでテストコードを実行する手順を解説しました。Laravelインストール時点で既に実行環境は整っているので簡単にテストを始めることができます。こういう親切設計がLaravelの良いところだと思います。

今後、各テストの作成方法など解説していけたらと思います。

Laravel

Posted by kobainmac