2010-05-03 102 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); 
}