Я использую Moq для написания тестов и могу смоделировать HttpClientHandler для вызова GetAsync (), но когда я пытаюсь смоделировать PostAsync (), он возвращает null.Есть ли способ смоделировать эту функциональность, не создавая обертку вокруг всего HttpClient?
Ниже приведен мой код модульного теста для подделки функции.
Mock<WebProxy> mockWebProxy = new Mock<WebProxy>();
mockWebProxy.Object.Address = new Uri(configuration.GetSection("TestProxy").Value);
mockWebProxy.Object.UseDefaultCredentials = true;
Mock<HttpClient> mockHttpClient = new Mock<HttpClient>();
var mockHttpClientHandler = new Mock<HttpClientHandler>();
mockHttpClientHandler.Object.Proxy = mockWebProxy.Object;
mockHttpClientHandler
.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>()
)
.ReturnsAsync(new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent("this is a test")
})
.Verifiable();
mockHttpClient = new Mock<HttpClient>(mockHttpClientHandler.Object, true);
Тогда я вызываю PostAsync ():
var response = await httpClient.PostAsync(new Uri(url), stringContent);
PostAsync () работает, когда не насмехается над httpClient.Но при издевательстве ответ выше нулевой.Это говорит мне о том, что используется смоделированный HttpClient, поскольку ответа нет, но я не уверен, почему он пуст, а не смоделированное HttpResponseMessage, которое работает для GetAsync ().