.NET Core 2.1にはHttpClientFactory
というこの新しいファクトリーが付属していますが、RESTサービス呼び出しを含むいくつかのメソッドを単体テストするためにそれをモックする方法がわかりません。
ファクトリは.NET Core IoCコンテナを使用して注入されており、メソッドが行うことはファクトリから新しいクライアントを作成することです。
var client = _httpClientFactory.CreateClient();
そして、クライアントを使用してRESTサービスからデータを取得します。
var result = await client.GetStringAsync(url);
スタブのセットアップ方法を説明した以前の投稿に加えて、Moqを使用してDelegatingHandler
をセットアップすることができます。
var clientHandlerMock = new Mock<DelegatingHandler>();
clientHandlerMock.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage(HttpStatusCode.OK))
.Verifiable();
clientHandlerMock.As<IDisposable>().Setup(s => s.Dispose());
var httpClient = new HttpClient(clientHandlerMock.Object);
var clientFactoryMock = new Mock<IHttpClientFactory>(MockBehavior.Strict);
clientFactoryMock.Setup(cf => cf.CreateClient()).Returns(httpClient).Verifiable();
clientFactoryMock.Verify(cf => cf.CreateClient());
clientHandlerMock.Protected().Verify("SendAsync", Times.Exactly(1), ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>());