ASP.NET + NUnit : Good unit testing strategy for HttpModule using . NET 4

标签 asp.net nunit c#-4.0

我有以下要进行单元测试的 HttpModule。问题是我不允许更改访问修饰符/静态,因为它们需要保持原样。我想知道测试以下模块的最佳方法是什么。我在测试东西方面还是很新的,主要是寻找有关测试策略和一般测试 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() { }
    }

最佳答案

对于仍在寻找的其他人,这篇文章解释了一种方法

原页面已被删除,您可以在这里查看文章:
https://web.archive.org/web/20151219105430/http://weblogs.asp.net/rashid/unit-testable-httpmodule-and-httphandler

关于ASP.NET + NUnit : Good unit testing strategy for HttpModule using . NET 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648610/

相关文章:

html - IIS 不提供静态内容(css/js/images 等)404

jquery - 服务器响应状态为 405(不允许方法)

asp.net - 服务器响应时间太长(ASP.NET MVC),如何查找哪个操作消耗了这么长的时间?

c# - 如何将 NUnit 的 EqualTo().Within() 约束与自定义数据类型一起使用?

c# - 如何隔离 DbSet 等数据源?

.net - NUnit 部署项

c#-4.0 - 在 C# 中 bool 值? x = 真; if (x == true) 看起来很尴尬

dynamic - 使用动态类型作为方法参数时的奇怪行为

c# - 如何在 C# 中的 IE 8 中的选项卡中打开新网页

.net - global.asax 上缓慢的 Application_Start 造成死锁