目次
2。Laravelの組み込みファサードの偽物と模擬を使用します
例:メールファサードを偽造します
3.コンテナにバインドされたサービスをock笑します
4.外部HTTP呼び出しにHttp::fake()を使用します
5。部分的なモック - 特定の方法のみをmockします
6.テスト後にモックをクリーンアップします
重要なヒント
ホームページ PHPフレームワーク Laravel Laravelテストでオブジェクトをock笑する方法は?

Laravelテストでオブジェクトをock笑する方法は?

Jul 27, 2025 am 03:13 AM
laravel 単体テスト

recreceive()で期待を設定することにより、カスタム依存関係にockeryを使用します。 2。実際の相互作用を防ぐために、メール、キュー、HTTPなどのファサードにLaravelのFake()メソッドを使用します。 3.クリーナー構文のために、コンテナバインドサービスを$ this-> mock()に置き換えます。 4。URLパターンを使用してhttp :: fake()を使用して、外部API応答をシミュレートします。 5. makepartial()を使用して部分モックを適用して、特定の方法のみをmockします。 6. ock笑でockをクリーンアップ:: close()。ただし、Laravelのベーステストクラスは通常これを処理します。テストが速く、信頼性が高く、孤立したままであることを保証するために、カスタムサービス用のLaravelコンポーネントとモックのフェイクを好みます。

Laravelテストでオブジェクトをock笑する方法は?

Laravelテストでオブジェクトをock笑することは、コードを分離し、データベース呼び出し、外部API要求、キュームのジョブなどの副作用を回避するための一般的な慣行です。 Laravelは、PHPunitと強力なMockeryライブラリとの統合のおかげで、オブジェクトをモックするいくつかの方法を提供します。

Laravelテストでオブジェクトをock笑する方法は?

Laravelテストでオブジェクトを効果的にモックする方法は次のとおりです。


1.モッキング依存関係にMockery使用します

Laravelにはデフォルトでock笑が含まれているため、クラスやインターフェイスのock笑を簡単に作成できます。

Laravelテストでオブジェクトをock笑する方法は?
 mockeryを使用してください。
Illuminate \ support \ facades \ httpを使用します。

パブリック関数test_external_api_is_called()
{
    $ mock = mockery :: mock( 'app \ services \ paymentgateway');
    $ mock-> sefstreceive( 'charge') - > and() - > andreturn(true);

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

    //テストロジックを実行します
    $ response = $ this-> post( '/pay');
    $ response-> assertok();
}

shouldReceive()メソッドは、モックの使用方法に関する期待を設定します。


2。Laravelの組み込みファサードの偽物と模擬を使用します

Laravel Facades( MailQueueCacheHttpなど)の場合、 fake()またはspy()使用します。

Laravelテストでオブジェクトをock笑する方法は?

例:メールファサードを偽造します

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

パブリック関数test_user_registration_sends_email()
{
    メール:: fake();

    //アクションを実行します
    $ this-> post( '/Register'、[
        'name' => 'John Doe'、
        「電子メール」=> 'john@example.com'、
        「パスワード」=>「秘密」
    ]);

    //アサートメッセージが送信されました
    メール:: assertsent(welcomemail :: class、function($ mail){
        返信$ mail-> hasto('john@example.com ');
    });
}
  • Mail::fake()を使用して、実際の電子メールが送信されないようにします。
  • assertSent()またはassertNotSent()を使用して、動作を検証します。

come: Queue::fake()Cache::fake()Notification::fake()Http::fake()で機能します。


3.コンテナにバインドされたサービスをock笑します

依存関係の注入を使用していて、コンテナ内のサービスを交換する場合:

 $ this-> instance(someservice :: class、mockery :: mock(someservice :: class、function($ mock){
    $ mock-> sefseceive( 'process') - > wunes() - > andreturn( 'mocked result');
}));

またはよりきれいに:

 $ this-> mock(someservice :: class、function($ mock){
    $ mock-> sefseceive( 'process') - > andreturn( 'mocked result');
});

->mock()Mockery::mock()app()->instance()を組み合わせたLaravelヘルパーメソッドです。


4.外部HTTP呼び出しにHttp::fake()を使用します

テスト中に実際のAPIを呼び出すことは避けてください:

 http :: fake([[
    'api.github.com/*' => http :: response(['name' => 'laravel']、200)、
]);

//ここで実際の呼び出しを行います
$ response = http :: get( 'https://api.github.com/orgs/laravel');

//アサートリクエストが送信されました
http :: assertsent(function($ request){
    $ request-> url()=== 'https://api.github.com/orgs/laravel';
});

また、 Http::fake()->preventStrayRequests()を使用して、予想されるURLのみがヒットすることを確認することもできます。


5。部分的なモック - 特定の方法のみをmockします

クラスの1つの方法だけをock笑し、他の方法を現実に保ちたい場合があります。

 $ service = mockery :: mock(myservice :: class)
     - > makepartial()
     - > recreceive( 'externalCall')
     - > andreturn( 'dummy')
     - > getMock();

$ this-> instance(myservice :: class、$ service);

これで、 externalCall()のみがmockedされます。他の方法は正常に実行されます。


6.テスト後にモックをクリーンアップします

テスト汚染を避けるために、常に模擬をきれいにしてください。

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

✅Laravelのベーステストクラス( TestCaseなど)は通常、すでにこれを処理します。


重要なヒント

  • FALYMail::fake()Queue::fake() )を使用可能な場合は、よりシンプルでlaravel固有です。
  • リターン値または動作を細かく制御する必要がある場合は、モックを使用します。
  • モッキングを避けてください。分離するために必要なものをock笑してください。
  • spy()を使用して、干渉せずに実際の呼び出しを観察します。
     $ this-> spy(someservice :: class);
    // 後で:
    $ this-> shouldhavereceived(someService :: class、 'method');

    基本的に、Laravelはモッキングを清潔で表現力豊かにします。 Laravelコンポーネントにはフェイクを使用し、カスタムサービスにはock笑を使用します。テストを迅速に、信頼性が高く、外部システムから独立しています。

    以上がLaravelテストでオブジェクトをock笑する方法は?の詳細内容です。詳細については、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)

PHPを使用してQ&Aコミュニティプラットフォームの開発方法PHPインタラクティブコミュニティの収益化モデルの詳細な説明 PHPを使用してQ&Aコミュニティプラットフォームの開発方法PHPインタラクティブコミュニティの収益化モデルの詳細な説明 Jul 23, 2025 pm 07:21 PM

1. PHP開発の質問と回答コミュニティにおけるLaravel MySQL VUE/Reactの組み合わせの最初の選択は、生態系の成熟度と高開発効率のため、Laravel MySQL Vue/Reactの組み合わせの最初の選択肢です。 2。高性能では、キャッシュ(REDIS)、データベース最適化、CDN、非同期キューへの依存が必要です。 3.入力フィルタリング、CSRF保護、HTTPS、パスワード暗号化、許可制御を使用してセキュリティを行う必要があります。 4。オプションの広告、メンバーのサブスクリプション、報酬、委員会、知識の支払い、その他のモデル、コアはコミュニティトーンとユーザーのニーズに合わせることです。

一致するLaravelルーティングパラメーターの合格とコントローラー方法を一致させるガイド 一致するLaravelルーティングパラメーターの合格とコントローラー方法を一致させるガイド Jul 23, 2025 pm 07:24 PM

この記事の目的は、ルーティングパラメーターの合格がコントローラーメソッドと一致するLaravelフレームワークの一般的なエラーを解決することを目的としています。ルーティング定義のコントローラーメソッド名にパラメーターを直接書き込むことで、「メソッドは存在しない」というエラーが発生する理由を詳細に説明し、コントローラーがルーティングパラメーターを正しく受信および処理できるように、正しいルーティング定義の構文を提供します。さらに、この記事では、削除操作でhttpdeleteメソッドを使用するためのベストプラクティスを探ります。

PHP PHPインテリジェントフォームの設計と分析を備えたAIインテリジェントフォームシステムを開発する方法 PHP PHPインテリジェントフォームの設計と分析を備えたAIインテリジェントフォームシステムを開発する方法 Jul 25, 2025 pm 05:54 PM

適切なPHPフレームワークを選択する場合、プロジェクトのニーズに応じて包括的に検討する必要があります。Laravelは迅速な発展に適しており、データベースの操作と動的フォームレンダリングに便利なEloquentormおよびBladeテンプレートエンジンを提供します。 Symfonyは、より柔軟で複雑なシステムに適しています。 Codeigniterは軽量で、高性能要件を持つ簡単なアプリケーションに適しています。 2。AIモデルの精度を確保するには、高品質のデータトレーニング、評価インジケーター(精度、リコール、F1値など)の合理的な選択、定期的なパフォーマンス評価とモデルチューニング、およびユニットテストと統合テストを通じてコードの品質を確保しながら、入力データを継続的に監視してデータドリフトを防ぐ必要があります。 3.ユーザーのプライバシーを保護するためには多くの手段が必要です:機密データを暗号化および保存する(AESなど

laravellivewireのモデルアソシエーションプロパティへの動的アクセスのためのdata_get練習 laravellivewireのモデルアソシエーションプロパティへの動的アクセスのためのdata_get練習 Jul 23, 2025 pm 06:51 PM

この記事の目的は、LaravelliveWireコンポーネントでデータを動的にレンダリングする際に、弦パスを介してモデルに関連するディーププロパティを効率的かつ安全にアクセスする方法を解決することを目的としています。構成文字列(「user.name」など)に基づいて関連するモデルの特定のフィールドを取得する必要がある場合、オブジェクトプロパティを使用したアクセスは失敗します。この記事では、Laravelのdata_getヘルパー機能を詳細に紹介し、コード例を提供して、この問題を優雅に解決し、データ収集の柔軟性と堅牢性を確保する方法を示します。

PHP環境で環境変数を設定する方法PHPランニング環境変数の追加の説明 PHP環境で環境変数を設定する方法PHPランニング環境変数の追加の説明 Jul 25, 2025 pm 08:33 PM

PHPに環境変数を設定する3つの主な方法があります。1。Php.iniを介したグローバル構成。 2。Webサーバー(apacheのsetenvやnginxのfastcgi_paramなど)を通過しました。 3。Phpスクリプトでcutenv()関数を使用します。その中でも、PHP.iniはグローバルおよび頻繁に変更された構成に適しており、Webサーバーの構成は分離する必要があるシナリオに適しており、Putenv()は一時的な変数に適しています。永続性ポリシーには、構成ファイル(PHP.INIまたはWebサーバーの構成など)、.ENVファイルにはDoTENVライブラリがロードされ、CI/CDプロセスの変数の動的注入が含まれます。セキュリティ管理に敏感な情報は、ハードコーディングを避ける必要があり、使用することをお勧めします。

PHPコンテナを自動構造をサポートする方法は? PHP環境の継続的に統合されたCI構成方法 PHPコンテナを自動構造をサポートする方法は? PHP環境の継続的に統合されたCI構成方法 Jul 25, 2025 pm 08:54 PM

PHPコンテナが自動構造をサポートできるようにするために、コアは連続統合(CI)プロセスの構成にあります。 1. DockerFileを使用して、基本的な画像、拡張インストール、依存関係管理、許可設定など、PHP環境を定義します。 2. GitlabciなどのCI/CDツールを構成し、.gitlab-ci.ymlファイルを介してビルド、テスト、展開段階を定義して、自動構造、テスト、展開を実現します。 3. phpunitなどのテストフレームワークを統合して、コードの変更後にテストが自動的に実行されることを確認します。 4. Kubernetesなどの自動展開戦略を使用して、deployment.yamlファイルを介して展開構成を定義します。 5. DockerFileを最適化し、マルチステージ構造を採用します

一致するLaravelルーティングパラメーター転送およびコントローラー法の深い分析 一致するLaravelルーティングパラメーター転送およびコントローラー法の深い分析 Jul 23, 2025 pm 07:15 PM

この記事では、ルーティングパラメーターの正しい送信と、Laravelフレームワークのコントローラーメソッドの一致メカニズムについて深く詳しく説明します。ルーティングパラメーターをコントローラーメソッド名に直接書き込むことによって引き起こされる一般的な「メソッドは存在しない」に応じて、この記事は、ルーティングを定義する正しい方法、つまりURIのパラメーターを宣言し、コントローラーメソッドの独立したパラメーターとして受信します。同時に、この記事では、開発者がより堅牢で安らかなLaravelアプリケーションを構築するのを支援することを目的とした、HTTPメソッドのベストプラクティスに関するコードの例と提案も提供しています。

laravelルーティングパラメーターの合格:コントローラーメソッドとルーティングバインディングを正しく定義します laravelルーティングパラメーターの合格:コントローラーメソッドとルーティングバインディングを正しく定義します Jul 23, 2025 pm 07:06 PM

この記事では、Laravelルーティングにおけるコントローラー法のパラメーター転送の正しい姿勢について詳しく説明します。ルーティングパラメーターをコントローラーメソッド名に直接書き込むことによって引き起こされる一般的なエラーに応じて、正しいルーティング定義の構文を詳細に説明し、Laravel自動パラメーターバインディングのメカニズムが強調されています。同時に、この記事では、削除操作を処理してアプリケーションの保守性とセマンティクスを改善するための安らかな仕様に沿ったhttpdeleteメソッドを使用することを推奨しています。

See all articles