​​ASP.NET + NUnit: хорошая стратегия модульного тестирования для HttpModule с использованием .NET 4

У меня есть следующий HttpModule, который я хотел для модульного тестирования. Проблема в том, что мне не разрешено изменять модификаторы доступа / статические, поскольку они должны быть такими, как есть. Мне было интересно, что будет лучшим методом для тестирования следующего модуля. Я все еще довольно новичок в тестировании и в основном ищу советы по стратегии тестирования и в целом тестированию HttpModules. Просто для пояснения, я просто пытаюсь получить каждый запрошенный URL-адрес (только страницы ASPX) и проверяю, есть ли у запрошенного URL-адреса разрешение (для определенных пользователей в нашей интрасети). Пока мне кажется, что я не могу по-настоящему протестировать этот модуль (с точки зрения продуктивности).

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() { }
    }
6
задан MSI 6 September 2010 в 01:51
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: