2010-11-11 35 views
2

我試圖使用MvcContrib TestHelper流利的路由測試API,但我看到奇怪的行爲。 .WithMethod(HttpVerb)擴展方法似乎沒有像預期的那樣執行。這裏的說明(2)操作(同名)接受不同HttpVerbs我的控制器:問題與MvcContrib TestHelper流暢的路由測試和特定的HttpVerbs

[HttpGet] 
public ActionResult IdentifyUser() 
{ 
    return View(new IdentifyUserViewModel()); 
} 

[HttpPost] 
public ActionResult IdentifyUser(IdentifyUserInputModel model) 
{ 
    return null; 
} 

這裏是應該映射到與[HttpPost]屬性的動作測試:

MvcApplication.RegisterRoutes(RouteTable.Routes); 

var routeData = "~/public/registration/useridentification/identifyuser" 
    .WithMethod(HttpVerbs.Post) 
    .ShouldMapTo<UserIdentificationController>(x => x.IdentifyUser(null)); 

即使盡管在我的測試中指定了POST HttpVerb,但它總是路由到HttpGet方法。 我甚至可以在我的控制器中註釋接受HttpPost的動作並仍然通過測試!

有什麼我在這裏失蹤?

回答

0

這可能與您如何註冊路線有關。我通常創建一個只能做到這一點的類。因此,在進行上述任何測試之前,我確保適當地設置我的測試夾具。

[TestFixtureSetUp] 
public void TestFixtureSetUp() 
{ 
    RouteTable.Routes.Clear(); 
    new RouteConfigurator().RegisterRoutes(RouteTable.Routes); 
} 

我的猜測是,由於RouteTable靜態處理它們,你可能會被要麼不添加,不清除,或增加每測試運行太多的路線遇到了問題。

+0

感謝您的迴應克里斯。這種情況與我的路線無關。我可以驗證,通過更改我的POST動作的名稱來說「IdentifyUserPost」,然後嘗試通過瀏覽器中的GET請求來訪問它。如預期的那樣失敗,但如果我將測試更改爲「〜/ public/registration/useridentification/identifyuserpost」並將其更改爲使用GET動詞,我仍會看到合格的測試。看起來這更多是由於該行爲沒有執行,只是某種程度的路由驗證。我正在研究MvcContrib的來源以瞭解更多信息... – 2010-11-12 13:13:11

相關問題