使用Asp.NetCore托管的WebAPI的HttpClient连接问题TestServer
问题描述:
在单元测试用例中,TestServer
用于WebAPI的内存中托管。在此之后,我们正努力使HttpConnection
这个使用像这样的代码托管的WebAPI:使用Asp.NetCore托管的WebAPI的HttpClient连接问题TestServer
HttpClient client= new HttpClient();
client.BaseAddress("url");
client.GetAsync("url").Result();
该代码给出了一个例外,错误消息
“连接被拒绝”。
但是,如果我们使用下面的代码获取HttpClient
对象并按照上述步骤操作,则它工作正常。
TestServer.CreateClient()
背后的原因是什么?是因为它是内存中托管的WebAPI吗?没有实际的Http上下文吗?
答
这是设计。当您致电TestServer.CreateClient()
客户专用HttpMessageHandler
已创建。该处理程序可以直接调用测试的API而不暴露它作为HTTP服务器:
public class TestServer : IServer, IDisposable
{
public HttpClient CreateClient()
{
HttpClient httpClient = new HttpClient(this.CreateHandler());
...
}
}
这应该是更快和足够适合于单元测试。对于集成测试,请在测试启动时运行Kestrel服务器。
P.S.我希望你的应用程序设计在使用DI而不是显式构建时变得更好。这很好,你用这种方式解决了这个问题。
好了,花了一些时间,但没有成功...并没有从这里得到任何帮助..最后,我改变了代码,通过依赖注入将HttpClient传递给控制器。它按预期运行良好。 – Munish