2010-05-03 104 views
4

我正在使用MVC2和MvcContrib HelpTester。MvcContrib测试助手问题

我有测试控制器在区域的问题。

这里是我的测试类:

[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 测试用例 'RouteTests.AdminProductShouldMapToIndex' 失败:预期产物但管理员 MvcContrib.TestHelper.AssertionException 信息:期望的产物但管理员 来源:MvcContrib.TestHelper 堆栈跟踪: 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); 
}