我刚接触MVC和TDD,如果这是一个愚蠢的问题,请轻善待我 :)
我想做的是创建一个SignOn控制器,并为该控制器编写测试。问题在于,SignOn控制器在内部执行了Response.Redirect操作,如果是正确的请求,那么操作正常。但当我运行测试时,它会失败,因为没有响应对象。
那么我如何测试我的SignOn控制器,它在内部进行重定向?
我刚接触MVC和TDD,如果这是一个愚蠢的问题,请轻善待我 :)
我想做的是创建一个SignOn控制器,并为该控制器编写测试。问题在于,SignOn控制器在内部执行了Response.Redirect操作,如果是正确的请求,那么操作正常。但当我运行测试时,它会失败,因为没有响应对象。
那么我如何测试我的SignOn控制器,它在内部进行重定向?
当您想要进行重定向时,应使用ActionResult:Redirect("url")
。在测试中,您可以检查ActionResult是否为RedirectResult类型和/或是否具有正确的属性值。
在控制器/Presenter中测试导航代码的模式之一是ApplicationController。
请查看以下描述PEAA:应用程序控制器
我们已经在我们的ASP.NET应用程序中实现了Aplication Controller。
ApplicationController.Navigate(view: "LoginScreen", argument: userId);
ApplicationController会检查已注册的NavigationWorkflows并将导航委托给正确的类。
在您的单元测试中,您可以使用rhino mocks之类的工具模拟NavigationWorkflow并将其传递给ApplicationController。然后,您可以检查工作流程上调用了哪些正确的导航方法。
因此,您不需要调用Response.Redirect,而是将导航责任委托给一个可用于单元测试的单独类。
我不是TDD的人,但有些东西告诉我HttpContextBase是你的朋友:http://msdn.microsoft.com/en-us/library/system.web.httpcontextbase.aspx
这里有一个很好的资源。
希望这能有所帮助。