単体テストで 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 を使用してシミュレーションする方法は次のとおりです:
代替: MockHttp
よりクリーンなアプローチを希望する場合は、MockHttp というライブラリを使用して 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 サイトの他の関連記事を参照してください。