2012-09-24 58 views
0

我正在嘗試編寫路由條目的測試方法,並且在我的路由配置中有很多條目用於不同的操作。我正在使用MvcContrib.TestHelper進行測試。我是新來的MVC以及TDD。請幫我解決這個問題。我的測試用例失敗了,我能做些什麼才能讓它通過。在MVC4中使用mvccontrib測試幫助測試路由條目時發出的問題

路由項

routes.MapRoute(
      name: "X1Details", 
      url: "X1/{X1ID}", 
      defaults: new { controller = "X1", action = "Index", X1ID = "X1ID" } 
      ); 

X1Controller

public ActionResult Index(int? instanceID = 0, string InfoMsg ="") 
    { 
    } 

測試方法

[Test Method] 
    public void Should_Route_X1Index() 
      { 

       "~/X1/" 
        .ShouldMapTo<X1Controller>(action => action.Index(null, "")); 

      } 

錯誤

試驗方法 XXX.Tests.MVCContibRouteMapTest.Should_Route_X1IndexOf 拋出異常:MvcContrib.TestHelper.AssertionException:價值 參數 'InfoMsg' 不匹配:預期 '' 但 '';沒有值 在名爲'InfoMsg'的路由上下文動作參數中找到 - 您的匹配路由是否包含名爲'InfoMsg'的令牌?

在此先感謝。

回答

0

默認值不適用於MVCContrib助手。你可以修改你的控制器動作,像這樣:

public ActionResult Index(int? instanceID, string InfoMsg) 
{ 
    ... 
} 

然後:

"~/X1".ShouldMapTo<X1Controller>(action => action.Index(null, null)); 
+0

我無法更改簽名,因爲InfoMsg必須具有String.Empty的默認值 – kbvishnu

1

我發現這種方法來工作,這應該讓你的控制器保持不變

[Test Method] 
public void Should_Route_X1Index() 
{ 
    var routeData = "~/X1/".Route(); 
    routeData.Values["InfoMsg "] = ""; 
    routeData.Values["instanceID"] = "0"; 
    routeData.ShouldMapTo<X1Controller>(action => action.Index(0, "")); 
}