webentwicklung-frage-antwort-db.com.de

So verspotten Sie die neue HttpClientFactory in .NET Core 2.1 mit Moq

.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);
15

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>());
1
rdvanbuuren