相关疑难解决方法(0)

在ASP.NET WebApi中测试路由配置

我正在尝试对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)

unit-testing routes asp.net-web-api

39
推荐指数
4
解决办法
2万
查看次数

具有asp.net WebApi的HttpClient在单元测试场景中

我有一个集成测试,我想用它作为测试我的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)

asp.net-web-api dotnet-httpclient

9
推荐指数
1
解决办法
4018
查看次数