का उपयोग कर 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() { }
}
एचएम कोई और नहीं कहा तो मैं लूंगा इसे अभी उत्तर के रूप में लें और मेरे तर्क को अलग करने का प्रयास करें। अभी भी रास्ते से एक अलग जवाब की तलाश है (यदि कोई है :)) – MSI