2013-10-29 40 views
11

我曾提升网络API项目到最新版本,使用MVC 5 应用程序正常运行,但此行的代码是不是我单位工作了测试:单元测试与不工作的ASP.NET MVC 5级网站API路线数据

string uri = this.Url.Link("DefaultApi", new { id = savedOrganization.Id }); 

控制器的Url属性现在为空。 这是我如何配置模拟控制器:

var config = new HttpConfiguration(); 
var request = new HttpRequestMessage(HttpMethod.Post, "http://xxx/api/organization"); 
var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}"); 
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary {{"controller", "organization"}}); 

controller.ControllerContext = new HttpControllerContext(config, routeData, request); 
controller.Request = request; 
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config; 
controller.Request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData; 

升级到MVC 5这是工作的罚款之前。

当我调试测试表明Url属性是现在空 enter image description here

回答

13

它看起来像在MVC 5以不同的方式创建Url属性。 我在我的测试中引入了这一行,现在Url属性恢复正常了

private static void SetupControllerForTests(ApiController controller) 
{ 
    var config = new HttpConfiguration(); 
    var request = new HttpRequestMessage(HttpMethod.Post, "http://api.clientele-itsm.com/api/organization"); 
    var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}"); 
    var routeData = new HttpRouteData(route, new HttpRouteValueDictionary 
    { 
     {"id", Guid.Empty}, 
     {"controller", "organization"} 
    }); 
    controller.ControllerContext = new HttpControllerContext(config, routeData, request); 
    UrlHelper urlHelper = new UrlHelper(request); 
    controller.Request = request; 
    controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config; 
    controller.Request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData; 
    /// inject a fake helper 
    controller.Url = urlHelper; 
}