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

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

Susan Sarandon
Susan Sarandonオリジナル
2025-01-13 13:46:43369ブラウズ

How to Mock HttpClient for Effective Unit Testing?

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

単体テストでは、ターゲット コードの動作を分離するために外部の依存関係をモックするのが一般的です。 Mock HttpClient を使用すると、実際のネットワーク呼び出しを行わずに、HTTP リクエストに依存するコードをテストできます。

次のシナリオを考えてみましょう:

<code class="language-csharp">public interface IHttpHandler
{
    HttpClient Client { get; }
}

public class HttpHandler : IHttpHandler
{
    public HttpClient Client => new HttpClient();
}

public class Connection
{
    private readonly IHttpHandler _httpClient;

    public Connection(IHttpHandler httpClient)
    {
        _httpClient = httpClient;
    }

    public void DoSomething() { /* 使用 _httpClient.Client 进行 HTTP 调用 */ }
}</code>

単体テスト プロジェクトでは、ネットワーク呼び出しを回避し、Connection クラスのロジックのテストに集中するために、HttpClient をモックすることができます。

<code class="language-csharp">private IHttpHandler _httpClient;

[TestMethod]
public void TestMockConnection()
{
    //此处需要创建 HttpClient 的模拟实例,而不是真实的实例
    var connection = new Connection(_httpClient);
    connection.DoSomething();
}</code>

これを行うには、依存関係注入を使用してモック HttpClient を注入します。 HttpClient の拡張性は、コンストラクターに渡される HttpMessageHandler にあります。単体テストでモック HttpMessageHandler を作成し、それを HttpClient コンストラクターに渡すことができます。

<code class="language-csharp">[TestMethod]
public void TestMockConnection()
{
    var mockHttp = new MockHttpMessageHandler(); // 创建一个模拟 HttpMessageHandler

    var httpClient = new HttpClient(mockHttp); // 将模拟 HttpMessageHandler 传递给 HttpClient 构造函数

    var connection = new Connection(new HttpHandler { Client = httpClient }); // 将模拟 HttpClient 注入 Connection 类

    connection.DoSomething();

    // 通过对模拟 HttpMessageHandler 设置期望来验证是否进行了预期的 HTTP 请求。
}</code>

依存関係の注入を使用し、HttpMessageHandler をモックすることにより、実際のネットワーク呼び出しを行うことなく、テスト対象のコードを効果的に分離し、その動作を検証できます。

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

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