2009-02-06 103 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)