在单位测试用例中,TestServer
用于WebAPI的内存托管。之后,我们试图使用这样的代码将HttpConnection
用于此托管的WebAPI:
HttpClient client= new HttpClient();
client.BaseAddress("url");
client.GetAsync("url").Result();
此代码给出了一个异常,带有错误消息
"连接拒绝"。
但是,如果我们使用以下代码获取HttpClient
对象并按照上述步骤操作,则可以正常工作。
TestServer.CreateClient()
它背后的原因是什么?是因为它是内存的托管WebAPI吗?没有实际的http上下文?
是设计。当您致电TestServer.CreateClient()
时,创建了一个具有 special HttpMessageHandler
的客户端。该处理程序允许直接调用测试的API,而无需将其公开为HTTP服务器:
public class TestServer : IServer, IDisposable
{
public HttpClient CreateClient()
{
HttpClient httpClient = new HttpClient(this.CreateHandler());
...
}
}
应该更快且适合单位测试。对于集成测试,请在测试启动时运行kestrel服务器。
P.S。我希望您的应用设计在DI而不是明确的建筑物方面变得更好。很好,您以这种方式解决了问题。