我正在尝试模拟使用 using 关键字在方法内创建的 Httpclient 请参阅以下示例。
Public string testmethod{
Using(Httpclient client = new Httpclient (){
Var content = "some content"
String url = "xxxx"
Client.defaultrequestheader(key,value);
Var response = client.postasync(uri,content)
})
}
我如何模拟上述大部分场景 Httpclient 在构造函数中初始化。
您正在使用
HttpCLient
关键字创建 new
的新实例,引入对所述类的硬依赖,并且不能模拟它。
您可以选择一些来模拟
HttpClient
,但您需要使用 IHttpClientFactory
来模拟它:
IHttpClientFactory
定义构造函数,它将被注入并使用 `Create 方法来获取客户端,IHttpClientFactory
的实例传递给该方法,然后使用它创建客户端在这两个选项中,您都可以模拟
Create
方法 - 这样您就可以从中返回模拟的 HttpClient
。
为了模拟客户端,请参考下面的代码
var mockMessageHandler = new Mock<HttpMessageHandler>();
mockMessageHandler.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent("test content")
});
var underTest = new SiteAnalyzer(new HttpClient(mockMessageHandler.Object));