エンジニアとして働きながら個人でLaravel10を触っています。記事を読みながら実装を進めていくとPHPUnitに関する記事がまとまっていない状態でした。そのため備忘録としてQiitaにまとめてみました。
環境
Windows10
ubuntu(wsl) 22.04.4 LTS
Laravel 10.48.12
PHP 8.3.7
DB sqlite3
PHPUnit とは
PHPUnitとはPHP言語の単体テストを行うためのフレームワークです。
変更した箇所で要件を満たしていて、既存の機能に影響がないかを自動で確認することができます。
PHPUnitのメリット・デメリット
メリット
- モジュールが結合される前にテストができるため、問題の原因特定が容易
- コードの作成と並行してテストコードを書くため、コード理解が深まる
- PHPUnitを使うことで自動化できる
→コマンドのみで動作確認が可能
デメリット
- 開発者の開発負担が高くなる
UnitとFeature
testsディレクトリ配下にはUnitとFeatureがあります。
使い分けについての説明 | |
---|---|
Feature | 1つのHTTPリクエストの動作テスト |
Unit | 1つ1つのメソッドなどの動作検証 |
UnitとFeatureの使い分け
Feature: Controller
Unit: Model、Service、Repository
上記の使い分けがスタンダードな分け方になるかと思います。
作成方法
新しいテストケースを作成するには、make:test
コマンドを使用します。デフォルトでは、テストはtests/Feature
ディレクトリへ配置されます。
php artisan make:test SampleTest
tests/Unit
ディレクトリ内にテストを作成したい場合は、make:test
コマンドを実行するときに--unit
オプションを使用します。
php artisan make:test SampleTest --unit
上記のコマンドを実行すると以下のようなPHPファイルが生成されます。
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class SampleTest extends TestCase
{
/**
* A basic feature test example.
*/
public function test_example(): void
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class SampleTest extends TestCase
{
/**
* A basic unit test example.
*/
public function test_example(): void
{
$this->assertTrue(true);
}
}
上記の内容を適宜修正すれば操作可能です。
おわりに
Laravelは多くの機能が入っています(MVC、bladeなど)。これらを使ってはじめてLaravelの美味しさを味わえるのだと思います。その足掛かりとしてPHPUnitを勉強していただけたらと思います。
参考記事
LaravelでPHPUnitを使ってテストする手法
LaravelビギナーのためのPHPUnitを利用したユニットテスト入門
LaravelでPHPUnitで自動テストを行う
【Laravel】PHPUnitでControllerの自動テストを実装する