gpt4 book ai didi

c# - 单元测试在 System.Net.Http v4 中使用 HttpClient 的类

转载 作者:太空狗 更新时间:2023-10-30 01:06:30 25 4
gpt4 key购买 nike

我想对下面使用 HttpClient 的搜索类进行单元测试,

public class Search:ISearch{
HttpClient httpClient;
public Search(HttpClient httpClient){
this.httpClient = httpClient;
}
//use httClient to send request.
}

有没有办法模拟 HttpClient?我无法通过 Google 找到任何信息。

更新

除了发送可以模拟的 Http Web 请求之外,是否有替代方案。我有以下代码:

 public class Search:ISearch{
private static readonly string url = "http://www.google.com/search";
public Result SendSearch(string query){
string queryUrl = string.Format("{0}?q={1}", url, query);
var webRequest = WebRequest.Create(queryUrl);
///...
}

最佳答案

在 .Net 4.5 框架中,您可以执行此操作。

public class FakeHttpMessageHandler : HttpMessageHandler
{
private HttpResponseMessage response;

public FakeHttpMessageHandler(HttpResponseMessage response)
{
this.response = response;
}

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var responseTask = new TaskCompletionSource<HttpResponseMessage>();
responseTask.SetResult(response);

return responseTask.Task;
}
}


[TestMethod]
public void TestGetContents()
{
var responseMessage = new HttpResponseMessage();
var messageHandler = new FakeHttpMessageHandler(responseMessage);
var client = new HttpClient(messageHandler);
var sut = new Search(client);

sut.SendSearch("urQuery");

// Asserts
}

关于c# - 单元测试在 System.Net.Http v4 中使用 HttpClient 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15326143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com