如何使用ASP.NET MVC对网页授权进行单元测试?

时间:2008-09-25 06:29:50

标签: asp.net-mvc tdd

假设您有一个只能由该个人资料的所有者访问的个人资料页面。此个人资料页面位于:

用户/资料/ {用户ID}

现在,我想,为了防止其他用户访问此页面,您可以构建UserController类的Profile函数来检查当前会话的标识:

HttpContext.Current.User.Identity.Name

如果id与url中的id匹配,则继续。否则,您将重定向到某种错误页面。

我的问题是你如何对这样的事情进行单元测试?我猜你需要使用某种依赖注入而不是控制器中的HttpContext来进行检查,但我不清楚最好的方法是什么。任何建议都会有所帮助。

4 个答案:

答案 0 :(得分:1)

您可以通过对控制器上下文使用假冒来实现。看看这篇文章:http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx

答案 1 :(得分:1)

上面的链接很好。我还要添加,而不是以编程方式检查User.Identity.Name值,您应该使用文章中概述的Authorize属性:

http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx

答案 2 :(得分:1)

我最终选择了Kazi Manzur的blog post中显示的“UserNameFilter”。像魅力和易于单元测试一样工作。

答案 3 :(得分:0)

这是使用虚假的HttpContext进行模拟的地方。