我有一个集成测试,我想将其用作测试我的WebAPI控制器的基础。
起初,我认为我必须在自托管模式下设置WebAPI,并通过本地Http进行端到端测试。
然而,后来我通过查看WebApiContrib项目中的测试发现,可以使用正确的服务路由设置HttpClient和HttpServer,从而无需在自托管模式下设置WebApi。我似乎可以对控制器进行单元测试。在客户端请求中,我可以放入任何域名,HttpClient似乎会自动绑定到正确的控制器。
这里是否有任何Http传输发生?是否使用了一些本地进程通信或纯粹“看到”服务器位于同一应用程序域中并因此使用反射?
这种情况下发生了什么?
代码:
起初,我认为我必须在自托管模式下设置WebAPI,并通过本地Http进行端到端测试。
然而,后来我通过查看WebApiContrib项目中的测试发现,可以使用正确的服务路由设置HttpClient和HttpServer,从而无需在自托管模式下设置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;
}