我有一个集成测试,我想用它作为测试我的 WebAPI 控制器的基础。
最初我认为我必须在自主机模式下设置 WebAPI 并通过本地 Http 执行端到端测试。
然而,我后来通过查看 WebApiContrib 项目中的测试意识到,可以设置一个带有 HttpServer 设置的 HttpClient 以及到 WebAPI 控制器的正确服务路由。我似乎可以对控制器进行单元测试,而无需在自托管模式下设置 WebApi。我可以在客户端的请求中输入任何域名,并且 HttpClient 似乎自动神奇地绑定到正确的控制器。
这里是否发生了任何 Http 传输,使用一些本地进程间通信或纯粹“看到”服务器位于同一个应用程序域中并因此使用反射?发生这种情况的幕后原因是什么?
代码:
[Test]
public void Test_WebApi_Controller()
{
Assembly.Load("myproj.Web");
var prodServiceMock = new Mock<IProductService>();
ObjectFactory.Initialize(x => x.For<IProductService>().Use(prodServiceMock.Object));
var config = new HttpConfiguration();
config.Routes.MapHttpRoute("default", "webapi/{controller}/{id}", new { id = RouteParameter.Optional });
config.ServiceResolver.SetResolver(new WebApiDependencyResolver());
var server = new HttpServer(config);
var client = new HttpClient(server);
var response = client.GetAsync("http://anything.com/webapi/product").Result;
}