.NET Core 2.1 wird mit dieser neuen Factory namens HttpClientFactory
geliefert, aber ich kann nicht herausfinden, wie ich sie verspotten kann, um einige Methoden zu testen, die REST Service-Aufrufe] enthalten.
Die Factory wird mithilfe des .NET Core IoC-Containers injiziert. Mit dieser Methode wird ab Werk ein neuer Client erstellt:
var client = _httpClientFactory.CreateClient();
Und dann den Client verwenden, um Daten von einem REST Service) abzurufen:
var result = await client.GetStringAsync(url);
Zusätzlich zu dem vorherigen Beitrag, in dem beschrieben wird, wie ein Stub eingerichtet wird, können Sie einfach Moq verwenden, um das DelegatingHandler
einzurichten:
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>());