Laravel

Laravelテスト自動化の基礎|初心者向けPHPUnit導入ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Laravelテスト自動化の重要性と学習目標

Laravelでプログラミングを始めた初心者にとって、テスト自動化は「なぜ必要なのか」が分かりにくいテーマです。しかし実際には、コードの品質保証やバグの早期発見・修正に大きく貢献します。本記事では、Laravel初心者がテスト自動化をゼロから学ぶための具体的な手順をステップバイステップで解説し、理解促進と実装への橋渡しを目指します。

以下では、PHPUnit導入・テストケース作成・データベーストランザクション利用など、初心者向けにわかりやすい具体例を交えて解説します。記事の終わりには、本記事で学べる内容を簡単なポイントリストでまとめます。


PHPUnitの導入と基本設定

Laravelプロジェクトでは、PHPUnitが事前にインストール済みのケースが多いため、手動での導入手順は必要ない可能性があります。ただし、プロジェクト構成に応じて確認が必要な場合もあります。以下に導入に関連する補足情報と基本的な使用方法を解説します。

LaravelにおけるPHPUnitの状況

Laravel 8以降では、phpunit.xmlファイルがデフォルトで存在し、PHPUnitはプロジェクトの依存関係として自動的にインストールされます。ただし、以下の手順を確認することで不安要素を排除できます。

  1. プロジェクトのcomposer.jsonにPHPUnitが記載されているか
    phpunit/phpunitパッケージがrequire-devに含まれていることを確認します。

  2. テスト実行コマンドを動作させる
    Laravelではphp artisan testvendor/bin/phpunitでテストを実行できます。これにより、インストール状態を検証可能です。

  3. 必要な場合の手動導入
    インストールされていない場合は、composer require --dev phpunit/phpunitで明示的に導入します。

注意: LaravelはPHPUnit 9以降との互換性を確保しているため、プロジェクトのPHPバージョンに合ったバージョンを選択してください。


テストケースの作成基礎

Laravelのテストはtests/Featuretests\Unitディレクトリに分かれて配置されます。「Feature」はHTTPリクエストを含む統合テスト「Unit」はモデルやロジックの単体テストを担当します。ここでは、「Hello World」レベルのテストコードを作成する手順を説明します。

第一歩:空のテストファイルの作成

  • php artisan make:test SampleTestで、tests/Unit/SampleTest.phpが生成されます。このファイルにはtestExample()メソッドがデフォルトで含まれています。

assertメソッドの使い方

PHPUnitでは「assert*」シリーズのメソッドを使ってテストを実行します。例えば:

このコードは、truetrueかどうかをチェックするシンプルなテストです。もう少し複雑な例として、変数の値を検証する方法もあります:


データベーストランザクションによるテスト環境管理

Eloquentモデルを使ったテストでは、データベースにデータが残らないようにする工夫が必要です。この目的でbeginTransaction()rollback()を使います。

トランザクションの自動コミット・ロールバックタイミング

  • 開始: beginTransaction()メソッドを呼び出すことで、データベース操作を一時的なトランザクションにします。
  • 終了: テスト終了後にrollback()で全ての変更を元に戻しますが、自動的に呼ばれるケースと手動で実行する必要があるケースがあります

注意: beginTransaction()はテストの初期化処理(setUp())内で呼び出すことで、すべてのテストでトランザクションを有効にできます。また、rollback()tearDown()で自動的に呼ばれることが一般的です。

トランザクション活用例


コントローラーのユニットテスト技法

コントローラーのテストでは、HTTPリクエストをシミュレートし、予期される結果(レスポンスコードやビュー名など)を検証します。

RouteとControllerの連携テスト

  • Route::get('/test', [TestController::class, 'index'])のようにルートが定義されている場合、create()メソッドでリクエストを生成します:

リクエストパラメータのモック化

テスト時にcall()メソッドでリクエストデータを指定できます。

注意事項

  • TestControllerの存在確認: tests/Unit/TestController.phpapp/Http/Controllers/TestController.phpにファイルが存在するかを必ず確認してください。
  • 存在しない場合は、php artisan make:controller TestControllerで作成します。

エラーハンドリングのテストアプローチ

テストでエラー処理を検証するには、「例外発生時の挙動」と「バリデーションエラーの確認」がポイントです。

例外発生時の検出方法

  • expectException()メソッドで特定の例外をキャッチできます:

注意: テスト終了後のリセット処理が必要なケース(例: サービスコンテナの再利用)では、expectException()の呼び出し後にexpectException(null)で状態を明示的にリセットしてください。

バリデーションエラーのテスト

入力チェックを行う際はValidator::make()を使うことで、エラーメッセージや条件をテストできます。

例外とステータスコードの比較表

テスト対象 検証方法 補足
エラーコード expectException() 例外クラスを指定して検出
ステータスコード assertStatus() HTTPレスポンスの確認
バリデーション Validator::make() 入力条件とエラーの検証

まとめ

本記事では、Laravel初心者がテスト自動化を学ぶために必要な以下の内容をステップバイステップで解説しました:

  • PHPUnitの導入方法
  • テストケース作成の手順とassertメソッドの使い方
  • データベーストランザクションによるテスト環境管理の仕組み
  • コントローラーをテストする際のHTTPリクエストシミュレーション
  • 例外発生時やバリデーションエラーのテスト技法

これらの知識は、Laravelプロジェクトにおけるコード品質向上に大きく貢献します。実際にLaravelプロジェクトでテストコードを書いてみることで、理解が深まります。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Laravel