2013-10-29 11 views
11

पर काम नहीं कर रहे रूट डेटा के साथ यूनिट टेस्ट मैंने एमवीसी 5 का उपयोग कर अपने वेब एपीआई प्रोजेक्ट को नवीनतम संस्करण में अपग्रेड किया है, एप्लिकेशन ठीक से चलता है लेकिन कोड की यह लाइन अब मेरी इकाई पर काम नहीं कर रही है परीक्षण:एएसपी.नेट एमवीसी 5 वेब एपीआई

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

नियंत्रक की यूआरएल संपत्ति अब शून्य है।

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 के उन्नयन यह ठीक काम कर रहा था पहले: यह मैं कैसे नकली नियंत्रक कॉन्फ़िगर है।

जब मैं परीक्षण डिबग यह पता चलता है कि यूआरएल संपत्ति अब अशक्त enter image description here

उत्तर

13

ऐसा लगता है कि MVC 5 में यूआरएल संपत्ति एक अलग तरीके से बनाया जाता है। मैंने अपने परीक्षणों में इस लाइन को पेश किया है और अब यूआरएल संपत्ति सामान्य पर वापस आ गई है

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; 
} 
संबंधित मुद्दे