2010-09-06 17 views
5

का उपयोग कर HttpModule के लिए अच्छी इकाई परीक्षण रणनीति मेरे पास निम्न HttpModule है जिसे मैं इकाई परीक्षण करना चाहता हूं। समस्या यह है कि मुझे एक्सेस संशोधक/स्थैतिक को बदलने की अनुमति नहीं है क्योंकि उन्हें ऐसा होना चाहिए। मैं सोच रहा था कि निम्नलिखित मॉड्यूल का परीक्षण करने का सबसे अच्छा तरीका क्या होगा। मैं अभी भी परीक्षण सामग्री में काफी नया हूं और मुख्य रूप से परीक्षण रणनीति और सामान्य परीक्षण HttpModules पर युक्तियों की तलाश में हूं। सिर्फ स्पष्टीकरण के लिए, मैं बस प्रत्येक अनुरोधित यूआरएल (केवल .aspx पृष्ठों) को पकड़ने की कोशिश कर रहा हूं और जांच कर रहा हूं कि अनुरोधित यूआरएल की अनुमति है (हमारे इंट्रानेट में विशिष्ट उपयोगकर्ताओं के लिए)। अब तक ऐसा लगता है कि मैं वास्तव में इस मॉड्यूल (उत्पादक परिप्रेक्ष्य से) का परीक्षण नहीं कर सकता।एएसपी.NET + NUnit: .NET 4

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() { } 
    } 

उत्तर

2

परीक्षण HttpHandlers परीक्षण मुश्किल हो सकता है। मैं आपको दूसरी लाइब्रेरी बनाने और उस कार्यक्षमता को रखने की सलाह दूंगा जिसे आप वहां परीक्षण करना चाहते हैं। इससे आपको चिंताओं का बेहतर अलगाव भी मिल जाएगा।

+0

एचएम कोई और नहीं कहा तो मैं लूंगा इसे अभी उत्तर के रूप में लें और मेरे तर्क को अलग करने का प्रयास करें। अभी भी रास्ते से एक अलग जवाब की तलाश है (यदि कोई है :)) – MSI

5

अन्य लोगों को अभी भी वहाँ की तलाश के लिए इस पोस्ट जो इसके लिए कोई तरीका बताते है यह

मूल पृष्ठ हटा दिया गया था, तो आप लेख यहां प्राप्त कर सकते हैं: https://web.archive.org/web/20151219105430/http://weblogs.asp.net/rashid/unit-testable-httpmodule-and-httphandler

+0

लिंक काम नहीं करता है। – Robert

+0

ने एक को archive.org वेबसाइट पर लिंक के साथ बदल दिया। – Riga