MVC TDD:如何为Response.Redirect编写测试?

时间:2011-10-20 13:07:14

标签: asp.net-mvc-3 tdd response.redirect

我是MVC和TDD的新手,所以如果这是一个愚蠢的问题请饶恕我:)

我想要做的是,我创建了一个SignOn控制器,我只想为该控制器编写一个Test。事情是SignOn控制器在内部做Response.Redirect,如果它是一个正确的请求,它工作正常,但是当我运行我的测试它失败,因为没有响应对象。

那么如何测试我的SignOn控制器,它在内部重定向?

4 个答案:

答案 0 :(得分:2)

如果要进行重定向,则应使用actionresult:Redirect("url")。在测试中,您可以检查actionresult是否为RedirectResult类型和/或是否具有正确的属性值。

答案 1 :(得分:0)

我不是TDD人,但有些东西告诉我HttpContextBase是你的朋友:http://msdn.microsoft.com/en-us/library/system.web.httpcontextbase.aspx

这是一个很好的资源。

http://weblogs.asp.net/gunnarpeipman/archive/2011/07/16/using-moq-to-mock-asp-net-mvc-httpcontextbase.aspx

希望这有帮助。

答案 2 :(得分:0)

可用于测试控制器/演示者内部导航代码的模式之一是ApplicationController。

请查看以下说明PEAA: Application Controller

我们已在ASP.NET应用程序中实现了应用程序控制器。

ApplicationController.Navigate(view: "LoginScreen", argument: userId);

ApplicationController检查哪些NavigationWorkflow已注册,并将导航转移到正确的类。

在单元测试中,您可以使用类似rhino mocks的东西模拟NavigationWorkflow并将其传递给ApplicationController。然后,您可以检查是否在工作流程中调用了正确的导航方法。

因此,您不必调用Response.Redirect,而是将导航职责委派给可以用单元测试替换的单独类。

答案 3 :(得分:0)

您的操作方法应返回RedirectResult。如果您确切知道URL应该是什么,则可以测试Url属性。