C# Web API测试:使用HttpClient的内存托管

C# Web API测试:使用HttpClient的内存托管,c#,asp.net-mvc,asp.net-mvc-4,razor,web-api-testing,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,Web Api Testing,我一直在使用HttpClient来设置我的Web API测试。这非常酷,因为您可以让HttpClient通过线路进行调用(实际上是访问远程资源),或者将服务器托管在内存中并在内部进行调用。非常灵活。我遇到了一个问题: using (HttpSelfHostConfiguration config2 = new HttpSelfHostConfiguration ("http://localhost:47620/")) { config2.Routes.MapHttpRoute("DefaultA

我一直在使用HttpClient来设置我的Web API测试。这非常酷,因为您可以让HttpClient通过线路进行调用(实际上是访问远程资源),或者将服务器托管在内存中并在内部进行调用。非常灵活。我遇到了一个问题:

using (HttpSelfHostConfiguration config2 = new HttpSelfHostConfiguration
("http://localhost:47620/"))
{
config2.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new 
{id=RouteParameter.Optional });
server = new HttpServer(config2);
httpClient = new HttpClient(server);
httpClient.BaseAddress = new Uri("http://localhost:47620/");

var response = await httpClient.GetAsync(new Uri("api/values/5", UriKind.Relative));
var version = await response.Content.ReadAsStringAsync();
}
HttpClient允许我通过线路或内存调用测试,如上所示。在电线上运行它们非常有效。但是,当我在内存中运行它们(上面的示例)时,测试确实会按预期命中控制器,但是在控制器内部,如果需要app.config值,它将为null

有人知道如何让HttpClient的内存主机尊重您的应用程序配置吗?如果这不可能的话,看起来就像一个大洞


提前谢谢

您是否使用类似于
RhinoMocks
的模拟框架来模拟您的配置?我不是。我希望由于内存中的调用能够承载控制器代码,所以我假设它也会尊重web.config值。你必须添加模拟才能让它工作,这似乎很疯狂。一旦你理解了它,不,一点也不疯狂——但是,是的,在你意识到旋转web.config是IIS管道的一部分之前,它似乎是这样的。我想是吧。但您为此创建的对象称为HttpServer…这就是IIS。:)我甚至无法手动配置HttpServer对象来读取配置,因此我认为您是正确的,我必须模拟我的控制器。唉。