web-dev-qa-db-ja.com

Moqを使用して.NET Core 2.1で新しいHttpClientFactoryをモックする方法

.NET Core 2.1にはHttpClientFactoryというこの新しいファクトリーが付属していますが、RESTサービス呼び出しを含むいくつかのメソッドを単体テストするためにそれをモックする方法がわかりません。

ファクトリは.NET Core IoCコンテナを使用して注入されており、メソッドが行うことはファクトリから新しいクライアントを作成することです。

var client = _httpClientFactory.CreateClient();

そして、クライアントを使用してRESTサービスからデータを取得します。

var result = await client.GetStringAsync(url);
15

スタブのセットアップ方法を説明した以前の投稿に加えて、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>());
1
rdvanbuuren