ホームページ >バックエンド開発 >C++ >単体テストで HttpClient を効果的にモックするにはどうすればよいですか?

単体テストで HttpClient を効果的にモックするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-13 14:03:43583ブラウズ

How Can I Effectively Mock HttpClient in Unit Tests?

単体テストで HttpClient をモックする

背景

単体テストでは、実際の呼び出しを避けるために、外部の依存関係を模擬することが望ましいことがよくあります。これは、HttpClient などの HTTP クライアントと対話するコードをテストする場合に特に重要です。

質問

次のコード構造を考えてみましょう:

<code>public interface IHttpHandler
{
    HttpClient Client { get; }
}

public class HttpHandler : IHttpHandler
{
    public HttpClient Client
    {
        get { return new HttpClient(); }
    }
}</code>

この場合、HttpHandler クラスは内部 HttpClient インスタンスに依存します。 IHttpHandler に依存する接続の模擬テストを作成するには、HttpClient の依存関係を模擬する必要があります。

解決策: HttpMessageHandler を使用します

HttpClient の拡張性により、HttpMessageHandler インスタンスの挿入が可能になります。モック HttpMessageHandler を作成することで、HttpClient の依存関係の動作を効果的に制御できます。

Moq の使用方法

Moq は、HttpClient のモックをサポートする人気のあるモック フレームワークです。 Moq を使用してシミュレーションする方法は次のとおりです:

  1. モック HttpMessageHandler を初期化します。
  2. When() メソッドを使用して、HTTP リクエストに対する予期される応答を設定します。
  3. モック IHttpHandler を作成し、モック HttpMessageHandler を挿入します。
  4. モック IHttpHandler を Connection クラスに挿入します。

代替: MockHttp

よりクリーンなアプローチを希望する場合は、MockHttp というライブラリを使用して HttpClient モックを簡素化できます。

  1. RichardSzalay.MockHttp NuGet パッケージをインストールします。
  2. MockHttpMessageHandler インスタンスを作成します。
  3. When() メソッドを使用して応答動作を指定します。
  4. MockHttpMessageHandler を HttpClient インスタンスに挿入します。

MockHttp を使用したコード例

<code>var mockHttp = new MockHttpMessageHandler();

mockHttp.When("http://localhost/api/user/*")
        .Respond("application/json", "{'name' : 'Test McGee'}");

var client = new HttpClient(mockHttp);

var response = await client.GetAsync("http://localhost/api/user/1234");

var json = await response.Content.ReadAsStringAsync();

Console.Write(json);  // {'name' : 'Test McGee'}</code>

HttpMessageHandler モックを使用すると、単体テストで HttpClient の依存関係の動作を効果的に分離し、外部要因から独立してテストを実行できるようになります。

以上が単体テストで HttpClient を効果的にモックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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