2009-02-06 64 views
3

我有以下HandleUnknownAction設置我的基本控制器類:我該如何測試ASP.NET MVC控制器的HandleUnknownAction()?

protected override void HandleUnknownAction(string action) 
{ 
    Response.Redirect("/"); 
} 

我怎麼能單元測試?還有一點,就是這種處理未知動作的方法是正確的嗎?似乎調用RedirectToAction()會更正確,但HandleUnknownAction沒有返回值。

遠,我能得到測試是:

[Test] 
public void TestHandleUnknownAction() 
{ 
    ctroler.ActionInvoker.InvokeAction(ctroler.ControllerContext, "unknown"); 
} 

我堅持它。

回答

3

我不認爲有必要測試一下,當一個控制器缺少一個操作時,調用HandleUnknownAction。我們相信這個框架來處理這個問題。所以我們可以直接用模擬框架Moq來調用HandleUnknownAction來測試實現。應該也可以用Rhino Mocks

public void TestHandleUnknownAction() 
{ 
    Mock<ControllerContext> cc = new Mock<ControllerContext> 
              (MockBehavior.Strict); 
    cc.Expect(c => c.HttpContext.Response.Redirect("/")); 

    TestHelperController controller = new TestHelperController(); 
    controller.ControllerContext = cc.Object; 

    controller.InvokeUnknownAction("test"); 
} 

凡TestHelperController使得訪問的HandleUnknownAction:

public class TestHelperController : RealController 
{ 
    public void InvokeUnknownAction(string action) 
    { 
     this.HandleUnknownAction(action); 
    } 
} 
+0

得到了關於調用HandleUknownAction的觀點,但是那個Mock對象魔法背後是什麼?這個對象來自哪裏?那個期望函數就是我要找的。 – 2009-02-09 22:09:34

1

那好一個簡單的Response.Redirect,但如果你想要做更復雜的東西像渲染的錯誤觀點,即單元測試代碼將無法正常工作:

// TODO - Put some stuff into ViewData or a model 
View("Error").ExecuteResult(Me.ControllerContext) 
相關問題