首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HttpClient.GetAsync()的UTest

使用HttpClient.GetAsync()的UTest
EN

Stack Overflow用户
提问于 2018-11-20 18:14:16
回答 1查看 91关注 0票数 0

我已经阅读了一些关于如何模拟或模拟HttpClient的文档,但是我不能成功地为我的单元测试重现。到目前为止,我不能连接HttpClient,所以我选择了注入HttpMessageHandler,我的想法是设置它,以便返回对客户端的任何调用的响应。

下面是要测试的代码:

代码语言:javascript
复制
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
            }
        }
    }
}

以下是测试中的代码

代码语言:javascript
复制
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/

感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2018-11-20 19:25:24

不需要模拟函数委托。

创建一个实际的函数

代码语言:javascript
复制
//...

Func<TimeSpan?, HttpClient> clientFactrory = _ => client;

//...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53390717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档