2008-12-10 156 views
2

我一直在閱讀關於單元測試控制器邏輯的正確方法的各種教程。採取以下措施:在大街上ASP.NET MVC控制器單元測試boggle

public ActionResult Login() 
    { 
     //Return the index view if we're still here 
     return View(); 
    } 

的話是要連接一個類似的測試方法:

[TestMethod] 
    public void TestLoginView() 
    { 
     //Set up an instance of the controller 
     var thisController = new UserController(); 

     //Invoke the index action 
     var actionResult = (ViewResult)thisController.Login(); 

     //Validate the test 
     Assert.AreEqual("Login", actionResult.ViewName); 
    } 

斷言按預期工作。但是,此控制器具有覆蓋OnActionExecuting函數的基類,以便設置各種頁面元素鑲邊(導航元素,麪包屑等)。這一點邏輯永遠不會被擊中。

我可以很容易地測試在控制器中使用的模型,但是我想在控制器層進行測試。想法?

回答

5

測試框架僅調用待測試的特定方法,它不模仿ASP.NET MVC框架並激發所有通常會發生的事件。我會在單獨的測試中測試OnActionExecuting邏輯,以確保它能正常工作。該測試應該只測試相關控制器方法中的功能。如果你基於其他事件觸發有特殊的期望,那麼在調用控制器方法之前,你需要在控制器上下文中模擬這些事件。

+0

我有點擔心可以通過這種方式來短路事件堆棧。 – bxlewi1 2008-12-10 21:37:37