ASP.NET NUnit:使用.NET 4的HttpModule的良好单元测试策略
发布时间:2020-12-16 07:15:33 所属栏目:asp.Net 来源:网络整理
导读:我有以下HttpModule,我想进行单元测试.问题是我不允许更改访问修饰符/ static,因为它们需要保持原样.我想知道测试以下模块的最佳方法是什么.我在测试内容方面还很陌生,主要是寻找有关测试策略和一般测试HttpModules的技巧.仅仅是为了澄清,我只是试图获取每个
我有以下HttpModule,我想进行单元测试.问题是我不允许更改访问修饰符/ static,因为它们需要保持原样.我想知道测试以下模块的最佳方法是什么.我在测试内容方面还很陌生,主要是寻找有关测试策略和一般测试HttpModules的技巧.仅仅是为了澄清,我只是试图获取每个请求的URL(仅限.aspx页面)并检查所请求的URL是否具有权限(对于我们的Intranet中的特定用户).到目前为止,感觉我无法真正测试这个模块(从生产的角度来看).
public class PageAccessPermissionCheckerModule : IHttpModule { [Inject] public IIntranetSitemapProvider SitemapProvider { get; set; } [Inject] public IIntranetSitemapPermissionProvider PermissionProvider { get; set; } public void Init(HttpApplication context) { context.PreRequestHandlerExecute += ValidatePage; } private void EnsureInjected() { if (PermissionProvider == null) KernelContainer.Inject(this); } private void ValidatePage(object sender,EventArgs e) { EnsureInjected(); var context = HttpContext.Current ?? ((HttpApplication)sender).Context; var pageExtension = VirtualPathUtility.GetExtension(context.Request.Url.AbsolutePath); if (context.Session == null || pageExtension != ".aspx") return; if (!UserHasPermission(context)) { KernelContainer.Get<UrlProvider>().RedirectToPageDenied("Access denied: " + context.Request.Url); } } private bool UserHasPermission(HttpContext context) { var permissionCode = FindPermissionCode(SitemapProvider.GetNodes(),context.Request.Url.PathAndQuery); return PermissionProvider.UserHasPermission(permissionCode); } private static string FindPermissionCode(IEnumerable<SitemapNode> nodes,string requestedUrl) { var matchingNode = nodes.FirstOrDefault(x => ComparePaths(x.SiteURL,requestedUrl)); if (matchingNode != null) return matchingNode.PermissionCode; foreach(var node in nodes) { var code = FindPermissionCode(node.ChildNodes,requestedUrl); if (!string.IsNullOrEmpty(code)) return code; } return null; } public void Dispose() { } } 解决方法
测试HttpHandler可能很棘手.我建议你创建第二个库,并在那里放置你想要测试的功能.这也可以让您更好地分离关注点.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 反伪造cookie令牌和表单字段令牌在MVC 4中不匹配
- asp.net-mvc-3 – 用于ASP.NET MVC的Razor View Engine的源
- asp.net – 为什么REST API会调用错误的方法?
- asp.net-mvc – 用于对Office 365 AD进行身份验证的MVC
- asp.net-mvc – 使用KendoUI Grid的KendoUI编辑器模板问题
- Asp.Net Identity – 在运行时设置CookieDomain
- 为什么我不能在ASP.net MVC中使用服务器控件?
- ASP会话算法通过PHP生成cookie
- asp.net-mvc – “信号量超时期限已过期”SQL Azure
- asp.net-mvc – 在MVC4.0中使用分页实现Category / Sub Cat
推荐文章
站长推荐
- asp.net-mvc – DropDownListFor在编辑视图上不重
- asp.net – Web Forms MVP项目有哪些好的资源?
- asp.net-mvc-4 – 在MVC中的App_Start()文件夹中
- JQGrid分组GroupText格式和修改
- asp.net-mvc-3 – 将@helper代码转移到App_Code文
- asp.net-mvc – ASP.NET MVC – 使用表单发布多个
- asp.net-mvc – URL中的Internet Explorer西里尔
- 在asp.net web api中不会触发Application_Error
- asp.net-mvc – 作为静态文件的根目录的项目子目
- 结合 AOP 轻松处理事件发布处理日志
热点阅读