2008-12-10 150 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