我已经阅读了一些关于如何模拟或模拟HttpClient的文档,但是我不能成功地为我的单元测试重现。到目前为止,我不能连接HttpClient,所以我选择了注入HttpMessageHandler,我的想法是设置它,以便返回对客户端的任何调用的响应。
下面是要测试的代码:
internal async Task Poll(Func<TimeSpan?, HttpClient> httpClientFactory, CancellationToken cancellationToken)
{
using (var client = httpClientFactory(_requestTimeout))
{
try
{
using (var response = await client.GetAsync(url, cancellationToken).ConfigureAwait(false))
{
// Do stuff with that
}
}
}
}以下是测试中的代码
var response = new HttpResponseMessage(httpStatusCode) { Content = responseContent };
var mockHttp = new Mock<HttpMessageHandler>();
mockHttp.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(response);
var client = new HttpClient(mockHttp.Object);
var mockedClientFactrory = new Mock<Func<TimeSpan?, HttpClient>>();
mockedClientFactrory.Setup(clientFactory => clientFactory(It.IsAny<TimeSpan?>())).Returns(client);观察到的行为是客户端没有响应,并且我停留在using(var response...)线路。
我哪里错了?我试着紧跟本教程,但我似乎遗漏了一些东西。https://gingter.org/2018/07/26/how-to-mock-httpclient-in-your-net-c-unit-tests/
感谢您的帮助!
发布于 2018-11-20 19:25:24
不需要模拟函数委托。
创建一个实际的函数
//...
Func<TimeSpan?, HttpClient> clientFactrory = _ => client;
//...https://stackoverflow.com/questions/53390717
复制相似问题