【发布时间】:2022-01-05 15:13:37
【问题描述】:
我有一个包含在标准 .net 类库中的自定义类,它使用 HttpClient 向外部面向公众的 api 发出请求。
当我通过标准 .net 控制台应用实例化类并调用方法时,会返回预期的结果。
但是,通过 Xunit 测试执行相同的代码会产生以下异常:
'底层连接已关闭:发送时发生意外错误。'
无法从传输连接读取数据:现有连接被远程主机强行关闭。
测试项目和类库项目框架都是.Net Standard 4.8。
大多数在线示例都使用 WebApplicationFactory,记录在 here。 就我而言,我没有使用 ASP Core,也无法使用此类。
我在 xunit 方面没有那么丰富的经验,并且错误消息中没有详细说明为什么会发生这种情况。
为了尝试隔离问题,我尝试直接在测试方法中运行这段代码,但发生了相同的错误。
非常感谢任何建议/解决方法。
using (HttpClient httpClient = new HttpClient())
{
var request = new HttpRequestMessage()
{
Method = HttpMethod.Get,
RequestUri = endpoint
};
request.Headers.Add("api-key", key);
using (HttpResponseMessage response = httpClient.SendAsync(request).Result)
{
var rawResponse = response.Content.ReadAsStringAsync().Result;
var response = JsonConvert.DeserializeObject<CustomResponse>(rawResponse);
}
}
【问题讨论】:
-
在调用 api 之前是否检查过是否提供了有效的端点?
-
是的,传递的参数与我在控制台应用程序中使用的完全相同。从控制台应用程序执行时它可以工作,从单元测试执行它失败。即使在方法本身中对端点和键值进行硬编码。