目次
fake()を使用する(ファサードに推奨)
2。サービスクラスをock笑するためにockeryを使用します
例:支払いゲートウェイをock笑します
3。雄弁さモデル(部分モック)のモッキングメソッド
4。HTTPクライアントのモッキング(外部API)
5。テスト間のモックのクリア
重要なテクニックの概要
ホームページ PHPフレームワーク Laravel Laravelテストでモッキングを使用する方法

Laravelテストでモッキングを使用する方法

Aug 08, 2025 pm 04:24 PM
laravel Mocking

Mail :: fake()または通知:: fake()を使用してファサードを模倣し、実際の副作用なしに送信されたメッセージをアサートします。 2。カスタムサービスクラスの場合、mockery :: mock()を使用して$ this-> instance()を使用して、mocked依存関係を挿入し、recereceive( 'method') - > andreturn($ value)のような予想される動作を定義します。 3.雄弁なモデルを部分的に模倣するには、mockery :: mock(model :: class) - > makepartial()およびStub固有の方法を使用しながら、他の人を機能させます。 4.外部HTTP呼び出しの場合、http :: fake()を使用して、特定のURLのモック応答を定義し、http :: assertsent()でリクエストをアサートします。 5.テスト間の干渉を防ぐために、Teardown()でmockery :: close()を常に呼び出します。実際の実装を置き換えてLaravel分離コードをock笑し、テストが速く、繰り返し可能であり、外部システムではなくロジックに焦点を合わせます。

Laravelテストでモッキングを使用する方法

Laravelテストでのモッキングは、実際の実装に依存することなくコードを分離し、特定の動作をテストする強力な方法です。これは、メール、キュー、API、データベースなどのサービスを扱う場合に特に役立ちます。 Laravelは、Phpunitを介したock笑と、箱から出したMockeryのような独自のヘルパーをock笑するための組み込みサポートを提供しています。

Laravelテストでモッキングを効果的に使用する方法は次のとおりです。


1。 fake()を使用したモッキングファサードまたはshouldReceive()

Laravel Facades( MailNotificationEventQueue )はfake()メソッドまたはshouldReceive()を使用して簡単にock笑できます。

fake()を使用する(ファサードに推奨)

これは、ほとんどのLaravel Facadesにとって最もクリーンな方法です。

 Illuminate \ support \ facades \ mailを使用します。

パブリック関数test_order_sends_email()
{
    メール:: fake(); //実際の電子メールが送信されないようにします

    $ user = user :: factory() - > create();
    $ this-> post( '/orders'、[
        'user_id' => $ user-> id、
        「製品」=> 'Laravel Shirt'、
    ]);

    //メールが送信されなかったと主張しています...
    メール:: assertnothingsent();

    //または特定の郵送可能が送信されました
    メール:: assertsent(注文:: class、function($ mail)use($ user){
        返信$ mail-> user-> id === $ user-> id;
    });
}

使用: MailNotificationEventQueueStorageBusなど。


2。サービスクラスをock笑するためにockeryを使用します

依存関係注射(コントローラーやジョブなど)を使用している場合、 Mockeryを使用してそれらのサービスをock笑することができます。

例:支払いゲートウェイをock笑します

サービスPaymentProcessorがコントローラーに注入されているとします。

 //テストで
app \ services \ paynedprocessorを使用します。
mockeryを使用してください。

パブリック関数test_payment_processes_successly()
{
    $ mock = mockery :: mock(paymentprocessor :: class);
    $ mock-> sefstreceive( 'charge') - > and() - > andreturn(true);

    $ this-> instance(paymentprocessor :: class、$ mock);

    $ response = $ this-> post( '/pay'、[
        「金額」=> 100、
    ]);

    $ response-> assertredirect();
    $ this-> assertdatabasehas( 'Payments'、['bument' => 100]);
}
  • shouldReceive('charge') Laravelに1回の呼び出しcharge()を期待するように指示します。
  • andReturn(true)返品値を定義します。
  • $this->instance()モックをlaravelサービスコンテナにバインドします。

これにより、テストが実際の支払いAPIにヒットしないようにします。


3。雄弁さモデル(部分モック)のモッキングメソッド

モデルを中心にロジックをテストしたいが、特定の方法( save()やイベントトリガーなど)が実行されない場合があります。

 app \ models \ userを使用してください。
mockeryを使用してください。

パブリック関数test_user_registration_with_mocked_save()
{
    $ user = mockery :: mock(user :: class) - > makepartial();
    $ user-> sefseceive( 'save') - > and() - > andreturn(true);

    //コントローラーロジックに注入または使用します
    $ this-> app-> instance(user :: class、$ user);

    $ response = $ this-> post( '/Register'、[
        'name' => 'John Doe'、
        「電子メール」=> 'john@example.com'、
        「パスワード」=>「秘密」、
    ]);

    $ response-> assertok();
}

makePartial()を使用して、特定の方法のみをockし、他の方法を現実に保ちます。


4。HTTPクライアントのモッキング(外部API)

LaravelのHttpファサードを使用すると、外部HTTP呼び出しを偽造できます。

 Illuminate \ support \ facades \ httpを使用します。

パブリック関数test_external_api_call_is_mocked()
{
    http :: fake([[
        'api.github.com*' => http :: response(['name' => 'laravel']、200)、
    ]);

    $ response = http :: get( 'https://api.github.com/repos/laravel/framework');

    $ this-> assertequals( 'laravel'、$ response ['name']);
    http :: assertsent(function($ request){
        $ request-> url()=== 'https://api.github.com/repos/laravel/framework';
    });
}
  • Http::fake()実際のhttpリクエストを防ぎます。
  • 特定のURLの応答を定義できます。
  • assertSent()またはassertPending()を使用して、リクエストを確認します。

5。テスト間のモックのクリア

複数のテスト方法でモックを使用している場合は、必ずクリーンアップしてください。

Laravelはfake()でFacadesを使用している場合に自動的にこれを処理しますが、 Mockeryを使用して、次のことを追加する必要があります。

保護された関数分解():void
{
    mockery :: close();
    親::涙();
}

これにより、テスト間の「すでにock笑された」エラーが回避されます。


重要なテクニックの概要

使用事例 方法
メール、通知、キュー Mail::fake()Notification::fake()
カスタムサービスクラス Mockery::mock() $this->instance()
モデル方法 Mockery::mock(Model::class)->makePartial()
HTTP呼び出し Http::fake()
相互作用を確認します assertSent()assertDispatched()など。

モッキングは、テストを迅速に、信頼性、焦点を維持するのに役立ちます。それを使用して、外部依存関係をシミュレートし、副作用を回避し、コードがサービスと正しく対話していることを確認します。

覚えておいてください:テスト中の動作を分離するために必要なものをock笑しないでください

基本的に、Laravel Facadesにfake()を使用し、カスタムクラスにはMockery使用します。パターンをダウンしても複雑ではありません。

以上がLaravelテストでモッキングを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelで紹介システムを実装する方法は? Laravelで紹介システムを実装する方法は? Aug 02, 2025 am 06:55 AM

紹介テーブルを作成して、紹介、紹介、推奨コード、使用時間を含む推奨関係を記録します。 2.推奨データを管理するために、ユーザーモデルのBelongStomanyとHasmanyの関係を定義します。 3.登録時に一意の推奨コードを生成します(モデルイベントを通じて実装できます)。 4.登録中にパラメーターをクエリすることにより、推奨コードをキャプチャし、検証後に推奨関係を確立し、自己称賛を防ぎます。 5.推奨されるユーザーが指定された動作(サブスクリプション順序)を完了した場合、報酬メカニズムをトリガーします。 6.共有可能な推奨リンクを生成し、Laravel Signature URLを使用してセキュリティを強化します。 7.推奨事項の総数や変換された番号など、ダッシュボードに推奨統計を表示します。データベースの制約、セッション、またはCookieが持続することを確認する必要があります。

Laravelプロジェクトを実行する方法は? Laravelプロジェクトを実行する方法は? Jul 28, 2025 am 04:28 AM

CheckPhp> = 8.1、Composer、およびWebserver; 2.CloneOrCreateProjectAndRunComposErinStall; 3.Copy.Env.Exampleto.ENVANDRUNPHPARTISANKEY :generate; 4.setDatabaseCredentialSin.EnvandrunphpartisanMigrate-- Seed; 5.StartServerWithPhpartisEnserve; 6.optionallyrunnpmins

Laravelでデータベースをシードする方法は? Laravelでデータベースをシードする方法は? Jul 28, 2025 am 04:23 AM

シーダーファイルの作成:phpartisanmake:seederuserseederを使用してシーダークラスを生成し、実行方法のモデルファクトリーまたはデータベースクエリを介してデータを挿入します。 2。Databaseseederで他のシーダーを呼び出す:sulderseeder、Postseederなどを登録$ this-> call()を介して依存関係が正しいことを確認します。 3。シーダーの実行:PHPARTISANDBを実行する:種子をすべて登録したすべてのシーダーを実行するか、PHPARTISANMIGRATE:FRESS-シードを使用してデータをリセットして補充します。 4

Laravelアプリに機能フラグを実装する方法は? Laravelアプリに機能フラグを実装する方法は? Jul 30, 2025 am 01:45 AM

chooseafeatureflagstrategysuchasconfigベース、データベース駆動型、orhird-partytoolslikeflagsmith.2.setupadatabase-drivensystemby-drivensystemmigrationforafeature_flagstablewithname、evanabled、andrulesfields、thenrunthigration.3

LaravelでREST APIを構築する方法は? LaravelでREST APIを構築する方法は? Jul 30, 2025 am 03:41 AM

新しいLaravelプロジェクトを作成し、サービスを開始します。 2。モデル、移行、コントローラーを生成し、移行を実行します。 3.ルート/api.phpのRESTFULルートを定義します。 4.ポストコントローラーに追加、削除、変更、クエリメソッドを実装し、JSON応答を返します。 5. PostmanまたはCurlを使用して、API関数をテストします。 6.オプションで、Sanctumを介してAPI認証を追加します。最後に、実用的なアプリケーションに適した、完全かつ拡張可能なLaravelRestapiの明確な構造を取得します。

Laravelの雄弁なOrmとは何ですか? Laravelの雄弁なOrmとは何ですか? Jul 29, 2025 am 03:50 AM

Eloquentormは、Laravelの組み込みオブジェクトリレーショナルマッピングシステムです。ネイティブSQLの代わりにPHP構文を介してデータベースを操作し、コードをより簡潔でメンテナンスしやすくします。 1.各データテーブルはモデルクラスに対応し、各レコードはモデルインスタンスとして存在します。 2。アクティブレコードモードを採用すると、モデルインスタンスを単独で保存または更新できます。 3。サポートバッチ割り当て、およびセキュリティを確保するために$充填可能な属性をモデルで定義する必要があります。 4. 1対1、1対10、多目的などなど、強力な関係サポートを提供し、メソッド呼び出しを介して関連するデータにアクセスできます。 5。クエリを構築するために、Orderbyおよびその他のメソッドをChainedと呼ぶことができる統合クエリコンストラクター。 6。属性を取得または設定するときに数値をフォーマットできるアクセサと修飾子をサポートします。

Laravelのリポジトリ契約とは何ですか? Laravelのリポジトリ契約とは何ですか? Aug 03, 2025 am 12:10 AM

リポジトリパターンは、データアクセスロジックからビジネスロジックを切り離すために使用される設計パターンです。 1.インターフェイス(契約)を介してデータアクセスメソッドを定義します。 2。特定の操作は、リポジトリクラスによって実装されます。 3.コントローラーは、依存関係噴射を介してインターフェイスを使用し、データソースに直接接触しません。 4.利点には、きちんとしたコード、強力なテスト可能性、簡単なメンテナンス、チームのコラボレーションが含まれます。 5。中規模および大規模なプロジェクトに適用されると、小規模プロジェクトはモデルを直接使用できます。

Laravelで熱心な積み込みは何ですか? Laravelで熱心な積み込みは何ですか? Jul 27, 2025 am 04:14 AM

eagerloadingpreventshen 1 queryproblembyloadingRelationhipsupfront.then 1problemoccurswhen1queryfetchesrecords(例:100posts)およびnadditionalquedrelateddata(例:authoreachpost)、resultingin101kerisedis.eerdiesfixesthis.

See all articles