.NET Core 2.1 est livré avec cette nouvelle usine appelée HttpClientFactory
, mais je ne peux pas comprendre comment le simuler pour tester un peu certaines méthodes qui incluent REST appels de service.
La fabrique est injectée à l'aide du conteneur .NET Core IoC, et la méthode consiste à créer un nouveau client à partir de la fabrique:
var client = _httpClientFactory.CreateClient();
Et puis en utilisant le client pour obtenir des données d'un service REST:
var result = await client.GetStringAsync(url);
En plus du post précédent qui décrit comment configurer un stub, vous pouvez simplement utiliser Moq pour configurer le 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>());