2017-04-21 64 views
1

在单元测试用例中,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上下文吗?

+0

好了,花了一些时间,但没有成功...并没有从这里得到任何帮助..最后,我改变了代码,通过依赖注入将HttpClient传递给控制器​​。它按预期运行良好。 – Munish

回答

0

这是设计。当您致电TestServer.CreateClient()客户专用HttpMessageHandler已创建。该处理程序可以直接调用测试的API而不暴露它作为HTTP服务器:

public class TestServer : IServer, IDisposable 
{ 
    public HttpClient CreateClient() 
    { 
     HttpClient httpClient = new HttpClient(this.CreateHandler()); 
     ... 
    } 
} 

这应该是更快和足够适合于单元测试。对于集成测试,请在测试启动时运行Kestrel服务器。

P.S.我希望你的应用程序设计在使用DI而不是显式构建时变得更好。这很好,你用这种方式解决了这个问题。