カテゴリ: Laravel 更新日: 2026/03/01

Laravelのテストでモック・スタブを使う方法を完全解説!MockeryとFacadeを初心者向けに理解しよう

Laravelのテストでモック・スタブを使う方法(Mockery・Facades)
Laravelのテストでモック・スタブを使う方法(Mockery・Facades)

先生と生徒の会話形式で理解しよう

生徒

「Laravelのテストで、外部の処理を使わずに確認する方法はありますか?」

先生

「あります。モックやスタブを使うと、本物の処理を動かさずにテストできます。」

生徒

「パソコンもまだ不慣れですが、理解できますか?」

先生

「日常の例えで説明するので、順番に読めば大丈夫です。」

1. Laravelのテストでなぜモックが必要なのか

1. Laravelのテストでなぜモックが必要なのか
1. Laravelのテストでなぜモックが必要なのか

Laravelのテストでは、アプリケーションが正しく動くかを自動で確認します。しかし、メール送信や外部サービスとの通信まで本当に実行すると、時間がかかったり失敗したりします。そこで使うのがモックやスタブです。これは「本物の代わり」を用意する仕組みです。電話の練習で本物の相手を呼ばず、練習用の人形を使うイメージに近いです。

2. モックとスタブの違いをやさしく理解

2. モックとスタブの違いをやさしく理解
2. モックとスタブの違いをやさしく理解

スタブは「決まった答えを返すだけの代役」です。一方、モックは「呼ばれた回数や使われ方まで確認する代役」です。初心者のうちは、スタブは簡単な置き換え、モックは動きをチェックするもの、と覚えれば十分です。LaravelではMockeryという仕組みを使って、これらを簡単に扱えます。

3. Mockeryとは何か

3. Mockeryとは何か
3. Mockeryとは何か

Mockeryは、テスト用の偽物オブジェクトを作るための道具です。Laravelには最初から組み込まれているため、特別な準備は不要です。Mockeryを使うことで「この処理が呼ばれたか」「決まった値を返しているか」を確認できます。難しい言葉に見えますが、テスト専用の便利な道具箱だと考えてください。

4. Mockeryを使った基本的なモックの書き方

4. Mockeryを使った基本的なモックの書き方
4. Mockeryを使った基本的なモックの書き方

ここでは、サービスクラスの処理をモックに置き換える例を見ます。本物の処理は動かさず、決まった結果だけを返します。


public function test_service_is_mocked()
{
    $mock = Mockery::mock(App\Services\SampleService::class);
    $mock->shouldReceive('execute')->once()->andReturn('OK');
    $this->app->instance(App\Services\SampleService::class, $mock);
    $this->assertEquals('OK', $mock->execute());
}

このコードではexecuteという処理が一回呼ばれ、「OK」が返ることを確認しています。

5. スタブとして使うシンプルな例

5. スタブとして使うシンプルな例
5. スタブとして使うシンプルな例

次は、呼ばれ方を細かく気にせず、結果だけを返すスタブの例です。初心者にはこちらの方が分かりやすいです。


public function test_stub_example()
{
    $mock = Mockery::mock(App\Services\CalcService::class);
    $mock->shouldReceive('sum')->andReturn(10);
    $this->app->instance(App\Services\CalcService::class, $mock);
    $this->assertSame(10, $mock->sum());
}

計算の中身は無視して、結果だけを確認しています。

6. Facadeを使ったモックの考え方

6. Facadeを使ったモックの考え方
6. Facadeを使ったモックの考え方

LaravelのFacadeは、便利な窓口のようなものです。ログやメール送信などを簡単に呼び出せます。テストでは、このFacadeもモックにできます。これにより、本当にメールを送らずに確認ができます。


use Illuminate\Support\Facades\Mail;

public function test_mail_is_sent()
{
    Mail::fake();
    Mail::to('test@example.com')->send(new SampleMail());
    Mail::assertSent(SampleMail::class);
}

Mail::fakeは「本物の送信を止める」命令です。

7. モックとFacadeを組み合わせる注意点

7. モックとFacadeを組み合わせる注意点
7. モックとFacadeを組み合わせる注意点

モックやFacadeを使いすぎると、本当の動作が分かりにくくなることがあります。必要な部分だけを置き換えるのが大切です。初心者のうちは「外部とつながる処理だけをモックする」と覚えておくと失敗しにくいです。

8. モック・スタブを使うメリット

8. モック・スタブを使うメリット
8. モック・スタブを使うメリット

モックやスタブを使うことで、テストは速く安定します。ネット環境や外部サービスに左右されず、安心して確認できます。Laravelのテストとモックを組み合わせることで、安全で管理しやすいアプリケーションを作れるようになります。

関連記事:
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyとは?PHPの堅牢なフレームワークの特徴と活用シーン
New2
Laravel
Laravelのプロジェクト構造を理解しよう!初心者向けディレクトリ解説
New3
Laravel
Laravelのモック化を完全解説!MockeryとFacadesでテストを簡単にする方法
New4
CodeIgniter
CodeIgniterバリデーションのよくある失敗例と対策!初心者向けエラーチェック完全ガイド
人気記事
No.1
Java&Spring記事人気No1
Symfony
Symfonyの抽象コントローラとは?AbstractControllerを初心者向けにやさしく解説
No.2
Java&Spring記事人気No2
PHP
PHPで定数を定義する方法!defineとconstの違いと使い分けを徹底比較
No.3
Java&Spring記事人気No3
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
No.4
Java&Spring記事人気No4
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.5
Java&Spring記事人気No5
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.6
Java&Spring記事人気No6
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelのルーティングの基本構文と書き方をやさしく解説!初心者でも理解できるWebルートの仕組み
No.8
Java&Spring記事人気No8
Symfony
Symfonyでルーティングとコントローラを連携する方法をやさしく解説!初心者でもわかるURLと処理のつなげ方