2013-10-29 13 views
11

Ho aggiornato il mio progetto web API alla versione più recente, utilizzando MVC 5 L'applicazione funziona correttamente ma questa linea di codice non funziona più sulla mia unità test:Test unità con dati di instradamento non funzionanti su API Web ASP.NET MVC 5

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

La proprietà Url del controller è ora nullo. questo è come mi configurare il controller finto:

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; 

Prima di eseguire l'aggiornamento a MVC 5 stava funzionando benissimo.

Quando il debug del test mostra che la proprietà url è ora nulla enter image description here

risposta

13

Sembra che nel MVC 5 la proprietà URL viene creato in un modo diverso. Ho introdotto questa linea nei miei test e ora la proprietà Url è tornata normale

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