首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在.NET测试中传入模拟的HttpClient?

如何在.NET测试中传入模拟的HttpClient?
EN

Stack Overflow用户
提问于 2014-03-06 11:32:08
回答 3查看 23.4K关注 0票数 56

我有一个使用Microsoft.Net.Http来检索一些Json数据的服务。太棒了!

当然,我不希望我的单元测试命中实际的服务器(否则,这是一个集成测试)。

下面是我的服务ctor (它使用依赖注入...)

代码语言:javascript
运行
AI代码解释
复制
public Foo(string name, HttpClient httpClient = null)
{
...
}

我不知道我怎么能用..。比方说..MoqFakeItEasy

我希望确保当我的服务调用GetAsyncPostAsync时..然后我就可以伪造那些电话了。

有什么建议可以让我这样做吗?

我希望我不需要自己做包装纸..因为那是废话:(微软不可能对此进行疏忽,对吧?

(是的,制作包装纸很容易。我以前做过..。但这就是重点!)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-08 03:09:54

您可以将核心HttpMessageHandler替换为假的。看起来像这样的东西。

代码语言:javascript
运行
AI代码解释
复制
public class FakeResponseHandler : DelegatingHandler
{
    private readonly Dictionary<Uri, HttpResponseMessage> _FakeResponses = new Dictionary<Uri, HttpResponseMessage>();

    public void AddFakeResponse(Uri uri, HttpResponseMessage responseMessage)
    {
        _FakeResponses.Add(uri, responseMessage);
    }

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
    {
        if (_FakeResponses.ContainsKey(request.RequestUri))
        {
            return Task.FromResult(_FakeResponses[request.RequestUri]);
        }
        else
        {
            return Task.FromResult(new HttpResponseMessage(HttpStatusCode.NotFound) { RequestMessage = request });
        }
    }
}

然后,您可以创建一个将使用假处理程序的客户端。

代码语言:javascript
运行
AI代码解释
复制
var fakeResponseHandler = new FakeResponseHandler();
fakeResponseHandler.AddFakeResponse(new Uri("http://example.org/test"), new HttpResponseMessage(HttpStatusCode.OK));

var httpClient = new HttpClient(fakeResponseHandler);

var response1 = await httpClient.GetAsync("http://example.org/notthere");
var response2 = await httpClient.GetAsync("http://example.org/test");

Assert.Equal(response1.StatusCode,HttpStatusCode.NotFound);
Assert.Equal(response2.StatusCode, HttpStatusCode.OK);
票数 96
EN

Stack Overflow用户

发布于 2015-12-11 19:40:10

我知道这是一个古老的问题,但我在搜索这个话题时遇到了这个问题,并找到了一个非常好的解决方案,使测试HttpClient变得更容易。

它可以通过nuget获得:

https://github.com/richardszalay/mockhttp

代码语言:javascript
运行
AI代码解释
复制
PM> Install-Package RichardSzalay.MockHttp

下面是对用法的快速了解:

代码语言:javascript
运行
AI代码解释
复制
var mockHttp = new MockHttpMessageHandler();

// Setup a respond for the user api (including a wildcard in the URL)
mockHttp.When("http://localost/api/user/*")
        .Respond("application/json", "{'name' : 'Test McGee'}"); // Respond with JSON

// Inject the handler or client into your application code
var client = new HttpClient(mockHttp);

var response = await client.GetAsync("http://localost/api/user/1234");
// or without await: var response = client.GetAsync("http://localost/api/user/1234").Result;

var json = await response.Content.ReadAsStringAsync();

// No network connection required
Console.Write(json); // {'name' : 'Test McGee'}

在github项目页面上有更多信息。希望这能对你有所帮助。

票数 19
EN

Stack Overflow用户

发布于 2014-03-06 11:53:44

您可能会看看Microsoft Fakes,特别是Shims-section。使用它们,您可以修改HttpClient本身的行为。前提条件是,您使用的是VS Premium或Ultimate。

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

https://stackoverflow.com/questions/22223223

复制
相关文章
HttpClient上传文件传入MultipartFile类型
通常我们在使用httpclient的时候,一把都是使用get或者postd的方式传输一些数据。在近期的项目中有这样的一个需求,我需要通过httpclient去调用一个写好的文件上传的接口,接口中是使用MultipartFile 来接受文件类型参数的。在这种情况下我们就开辟一个HttpClient中的高级功能了。直接上代码,封装了一个工具类:
一缕82年的清风
2021/12/06
5.5K1
Asp.Net Core中HttpClient的使用方式
在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数、使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变化,本次就讲解一下Asp.Net Core2.1前后使用的两种方式。
心莱科技雪雁
2019/03/11
1.2K0
Asp.Net Core中HttpClient的使用方式
.NET HttpClient扩展
/// <summary> /// HttpClient扩展类 /// </summary> public static class HttpClientExtensions { /// <summary> /// HttpClient请求封装 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="
guokun
2020/09/03
4560
如何在模拟器中测试Windows Phone 8的NFC应用
众所周知Window Phone 8 SDK的模拟器不支持NFC功能的测试。如果您开发了一款基于NFC功能的应用,那么意味着您测试时需要两台支持NFC的Windows Phone设备在手,这样的配置恐怕会让很多独立开发者望而却步。
星哥玩云
2022/07/04
2.4K0
如何在模拟器中测试Windows Phone 8的NFC应用
HttpClient测试框架
HttpClient是模拟Http协议客户端请求的一种技术,可以发送Get/Post等请求。 所以在学习HttpClient测试框架之前,先来看一下Http协议请求,主要看请求头信息。
yuanyuan
2019/09/02
1.1K0
HttpClient测试框架
HttpClient在HTTP协议接口测试中的使用
TTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提交请求与RAW请求,下面我将结合HttpClient来实现一下这三种形式:
流柯
2018/08/30
1.9K0
如何在 Android 模拟器中模拟 GPS 位置
可以通过 Telnet 连接到仿真器。然后你有一个模拟器控制台,可以让你输入某些数据,比如地理定位、网络等。
张云飞Vir
2021/12/06
9.8K0
如何在 Android 模拟器中模拟 GPS 位置
HttpClient4模拟表单提交[通俗易懂]
//servlet的访问地址是:http://localhost:80/testjs/servlet/FormServlet
全栈程序员站长
2022/09/15
8680
使用HttpClient测试SpringMVC的接口
最近在写SSM创建的Web项目,写到一个对外接口时需要做测试,接受json格式的数据。在线测试需要放公网地址,无奈localhost无法访问,测试工具需要安装,不想折腾,想到写爬虫的时候用到的HttpClient可以发Post请求,于是进行了尝试。
geekfly
2022/05/06
3260
ASP.NET Core 单元测试:如何 Mock HttpClient.GetStringAsync()
在 ASP.NET Core 单元测试中模拟HttpClient.GetStringAsync() 的技巧。
Edi Wang
2021/05/27
1.4K0
httpclient接口测试中重试控制器设置
本人在使用httpclient做接口测试的过程中,之前并没有考虑到请求失败自动重试的情况,但有时又需要在发生某些错误的时候重试,比如超时,比如响应频繁被拒绝等等,在看过官方的示例后,自己写了一个自动重试的控制器。分享代码,供大家参考。
FunTester
2019/09/25
9010
asp.net core之HttpClient
本文介绍了ASP.NET Core中的HttpClient和HttpClientFactory的作用、用法以及最佳实践。通过示例代码的展示,读者可以了解如何使用HttpClient发送HTTP请求并处理响应,以及如何使用HttpClientFactory来解决HttpClient的一些问题,如资源泄漏和性能问题。同时,本文还强调了HttpClientFactory的优势,如更好的性能、资源管理和可配置性。通过深入理解和应用HttpClient和HttpClientFactory,开发人员可以更好地与外部服务进行通信。
饭勺oO
2023/10/18
4650
asp.net core之HttpClient
MyBatis中传入参数parameterType
Mybatis的Mapper文件中的select、insert、update、delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型。
赵哥窟
2019/07/03
3K0
HttpClient-代理IP、模拟浏览器
创建HttpHost对象,设置代理IP(如114.113.126.82,端口80)。
wangmcn
2022/07/25
6880
HttpClient-代理IP、模拟浏览器
如何在 CMD 启动的软件传入带空格的路径
在使用 CMD 命令的时候,会将传入的命令按照空格分为多个不同的命令,但是路径经常是带有空格的。特别是想将参数传入到通过命令行启动的软件里面,可以如何做?
林德熙
2019/06/15
4.2K0
HttpClient参观记:.net core 2.2 对HttpClient到底做了什么?
.net core 于 10月17日发布了 ASP.NET Core 2.2.0 -preview3,在这个版本中,我看到了一个很让我惊喜的新特性:HTTP Client Performance Improvements ,而且在Linux上性能提升了60% !
ShenduCC
2018/12/05
1.1K0
HttpClient参观记:.net core 2.2 对HttpClient到底做了神马
.net core 于 10月17日发布了 ASP.NET Core 2.2.0 -preview3,在这个版本中,我看到了一个很让我惊喜的新特性:HTTP Client Performance Improvements ,而且在Linux上性能提升了60% !
ShenduCC
2019/06/11
5800
如何在Visual Studio中调试.NET源码
In order to configure Visual Studio 2013 do the following in the Tools -> Options -> Debugging -> General menu:
卡尔曼和玻尔兹曼谁曼
2019/01/22
2K0
如何在Visual Studio中调试.NET源码
httpclient模拟post请求json封装表单数据
以下代码包括最基本的GET、POST、JSON参数的POST方式的请求。(相当于POSTMAN中使用raw编写的参数)
I Teach You 我教你
2023/07/18
4050
点击加载更多

相似问题

如何在测试中模拟Angular 4.3 httpClient错误响应

10

在单元测试中模拟HttpClient

230

如何在SoapUI中测试对模拟服务的传入响应?

11

角度:单元测试中HttpClient的模拟

11

如何在单元测试HttpClient时模拟GetDiscoveryDocumentAsync?

2120
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文