使用ASP.NET Abstractions增强ASP.NET应用程序的可测试性
(role)) { this.ProcessRequestCore(context); return; } } throw new UnauthorizedAccessException(); } protected internal abstract void ProcessRequestCore(HttpContextBase context); protected internal abstract IEnumerable<string> AuthorizedRoles { get; } } 一般来说,我们会在IHttpHandler.ProcessRequest方法中进行逻辑实现,但是我们现在 直接把方法调用转发给接受HttpContextBase作为参数的ProcessRequest方法重载。 HttpContextBase是一个抽象类型,这便是我们的测试目标。这个方法首先判断用户是否经过 认证,然后再将用户的角色,与AuthorizedRoles抽象属性中表示的合法角色进行匹配,如果 匹配成功则调用ProcessRequestCore抽象方法,而无论是用户认证还是授权失败,都会抛出 UnauthorizedAccessException异常。 这里有一个题外话:不知您是否注意到,这里没有private方法,所有的方法都有 internal修饰。这么做的原因完全是为了进行单元测试。由于private方法无法被外部项目调 用,因此我们只能使用internal作为修饰符,再为程序集加上InternalVisibleToAttribute 标记,把所有的internal成员向测试项目开放。当然,此时程序集内部就能够随意调用那些 方法了——还好,都是自家人,注意点便是了。 这段逻辑需要测试的环节比较多,我们依次看一下:
这是对没有通过身份验证的请求的回应,我们设置 HttpContext.User.Identity.IsAuthenticated属性为false,并且声明不能碰触到 ProcessRequestCore和AuthroizedRoles属性。在这样的情况下,我们自然期望抛出 UnauthorizedAccessException。
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |