我在基本控制器类上设置了以下HandleUnknownAction:
protected override void HandleUnknownAction(string action)
{
Response.Redirect("/");
}
我如何进行单元测试?还有一点,那种处理未知动作的方法是否正确?似乎调用RedirectToAction()会更正确,但HandleUnknownAction没有返回值。
我可以测试的是:
[Test]
public void TestHandleUnknownAction()
{
ctroler.ActionInvoker.InvokeAction(ctroler.ControllerContext, "unknown");
}
我坚持不懈。
答案 0 :(得分: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);
}
}
答案 1 :(得分:1)
对于一个简单的Response.Redirect来说这很好,但是如果你想做一些像呈现错误视图这样更复杂的事情,单元测试代码将不起作用:
// TODO - Put some stuff into ViewData or a model
View("Error").ExecuteResult(Me.ControllerContext)