2010-05-03 2 views
4

Я использую MVC2 с MvcContrib HelpTester.MvcContrib Test Helper problem

У меня проблема с тестированием Контроллеры, которые находятся в Районах.

Вот мой тест класс:

[TestFixture] 
    public class RouteTests 
    { 


     [TestFixtureSetUp] 
     public void Setup() 
     { 
      RouteTable.Routes.Clear(); 
      MvcApplication.RegisterRoutes(RouteTable.Routes); 
     } 

     [Test] 
     public void RootMatchesHome() 
     { 
      "~/".ShouldMapTo<TradersSite.Controllers.HomeController>(x => x.Index()); 

     } 


     [Test] 
     public void AdminProductShouldMapToIndex() 
     { 
      "~/Admin/Produit/".ShouldMapTo<TradersSite.Areas.Admin.Controllers.ProductController>(x => x.Index()); 

     } 

Вот индекс действия моего ProductController в админку:

public ActionResult Index(int? page) 
     { 
      int pageSize = 10; 
      int startIndex = page.GetValueOrDefault() * pageSize; 

      var products = _productRepository.GetAllProducts() 
              .Skip(startIndex) 
              .Take(pageSize); 

      return View("Index", products); 
     } 

Вот карта маршрута в моем AdminAreaRefistration:

public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Admin_default", 
       "Admin/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

Наконец, вот сообщение, которое я получил от MbUnit:

[арматуре-установка] Успех [неудача] RouteTests.AdminProductShouldMapToIndex TestCase 'RouteTests.AdminProductShouldMapToIndex' не удалось: ожидаемый продукт, но был Администратор MvcContrib.TestHelper.AssertionException Сообщение: Ожидаемый продукт, но был Администратор Источник: MvcContrib.TestHelper StackTrace: RouteTests.cs (44,0): в CBL.Traders.ControllerTests.RouteTests.AdminProductShouldMapToIndex()

ответ

4

Ваш регион маршруты не регистрируются в настройках. Поскольку вы просто вызываете RegisterRoutes, который (по умолчанию) не регистрирует области, его пропускают.

Вы можете указать способ вызова AreaRegistration.RegisterAllAreas() напрямую (который обычно вызывается при запуске приложения или вам необходимо вручную зарегистрировать каждую область, которую вы хотите проверить). В вашем случае будет работать следующее:

public void Setup() 
{ 
    RouteTable.Routes.Clear(); 

    var adminArea = new AdminAreaRegistration(); 
    var context = new AreaRegistrationContext("Default", RouteTable.Routes); 
    adminArea.RegisterArea(context); 

    MvcApplication.RegisterRoutes(RouteTable.Routes); 
} 
Смежные вопросы