2013-10-29 1 views
11

Ich habe mein Web-API-Projekt auf die neueste Version aktualisiert, mit MVC 5 Die Anwendung läuft ordnungsgemäß, aber diese Codezeile funktioniert nicht mehr auf meinem Gerät Tests:Unit Test mit Routendaten arbeiten nicht auf ASP.NET MVC 5 Web API

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

Die Url-Eigenschaft des Controllers ist jetzt null. Dies ist, wie ich die Mock-Controller konfigurieren:

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; 

Bevor MVC Upgrade 5 es funktionierte gut.

Wenn ich den Test debuggen zeigt es, dass die Url-Eigenschaft jetzt null ist enter image description here

Antwort

13

Es ist wie in MVC sieht 5 die URL-Eigenschaft in einer anderen Art und Weise erzeugt wird. Ich habe diese Zeile in meinen Tests eingeführt und jetzt ist die Url-Eigenschaft wieder normal

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; 
}