我在基本控制器类上设置了以下HandleUnknownAction:

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


如何进行单元测试?还有一点,这种处理未知动作的方法正确吗?似乎调用RedirectToAction()会更正确,但是HandleUnknownAction没有返回值。

我可以测试的范围是:

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


我被卡住了。

最佳答案

我认为没有必要测试控制器缺少动作时是否调用了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);
    }
}

关于asp.net-mvc - 如何对ASP.NET MVC Controller 的HandleUnknownAction()进行单元测试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/521107/

10-10 13:18