カテゴリ: 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
Laravel
Laravelのコントローラでリクエストをログ出力する方法を初心者向けに解説
New2
Laravel
Laravelでモデルからデータを取得・保存・更新・削除する方法を完全ガイド!初心者でもわかるEloquent ORM入門
New3
Symfony
Symfonyのセッション管理完全ガイド!初心者でもわかるセッションドライバ設定(file・Redis)
New4
Laravel
Laravelのエラーメッセージをカスタマイズする方法|初心者向けガイド
人気記事
No.1
Java&Spring記事人気No1
Laravel
LaravelでBasic認証を実装するミドルウェアの使い方!初心者向けガイド
No.2
Java&Spring記事人気No2
Symfony
SymfonyでTwigテンプレートを表示する方法を完全ガイド!初心者にもわかるHTMLとの違いや使い方
No.3
Java&Spring記事人気No3
Laravel
Laravelでモデルからデータを取得・保存・更新・削除する方法を完全ガイド!初心者でもわかるEloquent ORM入門
No.4
Java&Spring記事人気No4
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.5
Java&Spring記事人気No5
Laravel
LaravelでファクトリとSeederを組み合わせてダミーデータを生成する方法!初心者でも簡単にテストデータ作成
No.6
Java&Spring記事人気No6
Symfony
Symfonyのコントローラでリダイレクトする方法を徹底解説!初心者にもやさしく解説
No.7
Java&Spring記事人気No7
Laravel
LaravelのテストでCSRFやセッションの扱いをやさしく理解しよう!初心者向け完全ガイド
No.8
Java&Spring記事人気No8
Symfony
Symfonyでメモリキャッシュ(APCu)を活用する方法を初心者向けに完全解説