2010-10-01 22 views
2

J'ai la configuration de la route par défaut:Pourquoi mon test d'itinéraire échoue-t-il mais l'itinéraire fonctionne-t-il lors de l'exécution de l'application?

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
      "Shortie", // Route name 
      "{controller}/{id}", // URL with parameters 
      new { controller = "Ettan", action = "Index", id = "id" } // Parameter defaults 
      ); 

    routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Ettan", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
      ); 
} 

Je cours le test suivant dans nunit/ReSharper, en utilisant Moq pour configurer le HttpContext:

[TestFixture] 
public class RoutesTests 
{ 
    [Test] 
    public void RoutingTest() 
    { 
     var routes = new RouteCollection(); 
     MvcApplication.RegisterRoutes(routes); 

     AssertRoute(routes, "~/", "Ettan", "Index"); 
     AssertRoute(routes, "~/Artikel/123", "Artikel", "Index"); 

    } 

    public static void AssertRoute(RouteCollection routes, string url, string controller, string action) 
    { 
     var httpContext = new Mock<HttpContextBase>(); 
     httpContext.Setup(c => c.Request.AppRelativeCurrentExecutionFilePath).Returns("~/"); 

     var routeData = routes.GetRouteData(httpContext.Object); 


     Assert.IsNotNull(routeData); 
     Assert.AreEqual(controller, routeData.Values["Controller"]); 
     Assert.AreEqual(action, routeData.Values["Action"]); 
    } 
} 

Je me attends Les deux AssertRoutes aboutissent, mais la seconde échoue (elle route vers controller = "Ettan", pas controller = "Artikel"). Cependant, si j'exécute l'application mvc et navigue jusqu'à localhost/Artikel/123, je serai routé vers le contrôleur Artikel. Pourquoi est-ce? Quelque chose ne va pas avec mes tests?

Répondre

3

Dans AssertRoute, vous configurez httpContext.Request.AppRelativeCurrentExecutionFilePath pour toujours retourner "~/" au lieu de l'URL que vous souhaitez tester.

+0

Oui, c'était trop évident. Merci. –