【发布时间】:2018-08-21 00:10:51
【问题描述】:
我有一个 C# Asp.Net Core (1.x) 项目,实现了一个 Web REST API 及其相关的集成测试项目,在任何测试之前都有一个类似的设置:
// ...
IWebHostBuilder webHostBuilder = GetWebHostBuilderSimilarToRealOne()
.UseStartup<MyTestStartup>();
TestServer server = new TestServer(webHostBuilder);
server.BaseAddress = new Uri("http://localhost:5000");
HttpClient client = server.CreateClient();
// ...
在测试期间,client 用于向 Web API(被测系统)发送 HTTP 请求并检索响应。
在实际测试系统中,有一些组件会从每个请求中提取发送者 IP 地址,如下所示:
HttpContext httpContext = ReceiveHttpContextDuringAuthentication();
// edge cases omitted for brevity
string remoteIpAddress = httpContext?.Connection?.RemoteIpAddress?.ToString()
现在在集成测试期间,这段代码无法找到 IP 地址,因为RemoteIpAddress 始终为空。
有没有办法从测试代码中将其设置为某个已知值?我在 SO 上搜索了这里,但找不到类似的东西。助教
【问题讨论】:
-
显示
ReceiveHttpContextDuringAuthentication() -
这只是一个虚构的函数来表示正在发生的事情。在实际代码中,IP 地址是在身份验证框架 (ASOS) 提供的扩展点中提取的。该框架将当前请求
HttpContext作为输入之一传递给扩展点。
标签: asp.net-core integration-testing asp.net-core-webapi