2010-10-01 4 views
2

У меня есть настройки по умолчанию маршрута:Почему мой маршрут проверяется, но маршрут работает при запуске приложения?

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

Я бегу следующий тест в NUnit/ReSharper, используя Moq для настройки 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"]); 
    } 
} 

Я ожидал оба AssertRoutes к успеху, но второй не удается (он маршрутизирует контроллер = «Ettan», а не контроллер = «Artikel»).

Однако, если я запустил приложение mvc и перейду к localhost/Artikel/123, я буду перенаправлен в контроллер Artikel. Почему это? Что-то не так с моими испытаниями?

ответ

3

В AssertRoute вы настраиваете httpContext.Request.AppRelativeCurrentExecutionFilePath, чтобы всегда возвращать "~/" вместо URL-адреса, который вы хотите проверить.

+0

Да, это было слишком очевидно. Благодарю. –

Смежные вопросы