カテゴリ: 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のルーティングの基本を完全ガイド!YAML・PHP・アノテーションの違いもわかりやすく解説
New2
Laravel
LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New3
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New4
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.4
Java&Spring記事人気No4
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.5
Java&Spring記事人気No5
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.6
Java&Spring記事人気No6
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelでコントローラを作成する方法(artisanコマンド)