首页 > 解决方案 > 为什么我们需要注册 IHttpClientFactory?

问题描述

这是文档https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.1 我们可以看到 IHttpClientFactory 已注册:

services.AddHttpClient();

以及使用它的模型类:

public BasicUsageModel(IHttpClientFactory clientFactory)
{
   _clientFactory = clientFactory;
}

public async Task OnGet()
{
   ...
   var client = _clientFactory.CreateClient();
   var response = await client.SendAsync(request);
   ...
}

但是我们不注册它怎么样,我们只是创建它的一个新实例:

public async Task OnGet()
{
   ...
   var client = new HttpClient();
   var response = await client.SendAsync(request);
   ...
}

这样BasicUsageModel's 的构造函数不需要带任何参数,并且在进行单元测试时,我不需要使用 Moq 来模拟它,这不是更好吗?

对于第一种情况,如何在不实际发送请求的情况下模拟IHttpClientFactory测试?OnGet()

标签: c#.netasp.net-core.net-coredependency-injection

解决方案


什么时候做单元测试,我不需要用 Moq 来模拟它,那不是更好吗

不,这不对。单元测试的重点是在没有依赖关系的情况下测试单元。在这种情况下,没有要连接的实际服务器。

假设您对实际获取数据的客户进行了一项单元测试,并在客户未能获取数据时进行了一项单元测试,那么您无法以自己的方式合理地做到这一点。

需要对其进行模拟,以便能够为您的 http 调用的不同结果提供多个​​测试用例。


推荐阅读