我正在尝试对WebApi路由配置进行一些单元测试.我想测试路由"/api/super"映射到Get()我的方法SuperController.我已经设置了以下测试,并且遇到了一些问题.
public void GetTest()
{
var url = "~/api/super";
var routeCollection = new HttpRouteCollection();
routeCollection.MapHttpRoute("DefaultApi", "api/{controller}/");
var httpConfig = new HttpConfiguration(routeCollection);
var request = new HttpRequestMessage(HttpMethod.Get, url);
// exception when url = "/api/super"
// can get around w/ setting url = "http://localhost/api/super"
var routeData = httpConfig.Routes.GetRouteData(request);
request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;
var controllerSelector = new DefaultHttpControllerSelector(httpConfig);
var controlleDescriptor = controllerSelector.SelectController(request);
var controllerContext =
new HttpControllerContext(httpConfig, routeData, request);
controllerContext.ControllerDescriptor = controlleDescriptor;
var selector = new …Run Code Online (Sandbox Code Playgroud) 我有一个集成测试,我想用它作为测试我的WebAPI控制器的基础.
最初我认为我必须在自主模式下设置WebAPI并在本地Http上执行端到端测试.
但是后来我通过查看WebApiContrib项目中的测试来实现,可以使用HttpServer设置HttpServer来设置具有到WebAPI控制器的正确服务路由的HttpClient.我似乎可以在没有在自主模式下设置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;
}
Run Code Online (Sandbox Code Playgroud)