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

时间:2020-03-06 14:42:22  来源:igfitidea点击:

假设我们有一个个人资料页面,只有该个人资料的所有者可以访问。此个人资料页面位于:

用户/个人资料/ {userID}

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

HttpContext.Current.User.Identity.Name

如果ID与网址中的ID相匹配,则继续。否则,我们将重定向到某种错误页面。

我的问题是,我们如何对此类内容进行单元测试?我猜测我们需要在控制器中使用某种依赖项注入而不是HttpContext来进行检查,但是我不清楚实现此目的的最佳方法是什么。任何意见将是有益的。

解决方案

我们可以通过在控制器上下文中使用伪造品来做到这一点。查看本文:http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx

上面的链接是一个很好的链接。我还要补充一点,而不是以编程方式检查User.Identity.Name值,我们应该使用本文概述的Authorize属性:

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

我最后选择了Kazi Manzur的博客文章中显示的" UserNameFilter"。就像魅力一样,易于进行单元测试。

这就是使用伪造的HttpContext进行模拟的地方。