c# - 为什么我们需要注册 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()
解决方案
什么时候做单元测试,我不需要用 Moq 来模拟它,那不是更好吗
不,这不对。单元测试的重点是在没有依赖关系的情况下测试单元。在这种情况下,没有要连接的实际服务器。
假设您对实际获取数据的客户进行了一项单元测试,并在客户未能获取数据时进行了一项单元测试,那么您无法以自己的方式合理地做到这一点。
您需要对其进行模拟,以便能够为您的 http 调用的不同结果提供多个测试用例。
推荐阅读
- angularjs - AngularJS 控制器在 ng-Route 期间未正确加载,否则()
- amazon-web-services - aws golang sdk 进行异步创建实例调用
- openlayers - OpenLayers 6 - 添加第二个矢量切片图层会导致基础图层标签消失
- c# - 无法从“对象”转换为“MySql.Data.MySqlClient.MySqlDbType”
- c++ - *--end() 在 C++ 中是什么意思?
- javascript - TS/JS 自启动类
- c# - 带有asp.net网页表单页面代码的扩展方法存在问题
- list - 在列表中的元素之间添加零?
- python - 在 Linux Mint 中使用启动器和基本代码启动 Jupyter Notebook
- windows - 如何诊断“随机”winsock 故障