मैं एमवीसी 5 वेब अनुप्रयोग के लिए यूनिट टेस्ट लिख रहा हूं। मैंने अपने परीक्षण से HttpContext.Current
का मज़ाक उड़ाया है। जब कोड के रूप परीक्षण httpSessionStateAfter
फेंकHttpContext.Current प्रतीक्षा के बाद शून्य है (केवल यूनिट परीक्षणों में)
System.AggregateException निम्नलिखित चलाने: एक या अधिक त्रुटियां हुईं।
----> System.NullReferenceException: ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।
यह तब होता है जब मैं यूनिट परीक्षण चलाता हूं। जब एप्लिकेशन इस काम को ठीक करता है। मैं reshaper परीक्षण धावक के साथ नुनिट 2.6.3 का उपयोग कर रहा हूँ।
var httpSessionStateBefour = System.Web.HttpContext.Current.Session;
var Person= await Db.Persons.FirstOrDefaultAsync();
var httpSessionStateAfter = System.Web.HttpContext.Current.Session;
इस समस्या को कैसे खत्म करें?
यह मैं कैसे HttpContext
HttpContext.Current = Fakes.FakeHttpContext();
HttpContext.Current.Session.Add("IsUserSiteAdmin", true);
HttpContext.Current.Session.Add("CurrentSite", null);
public static class Fakes
{
public static HttpContext FakeHttpContext()
{
var httpRequest = new HttpRequest("", "http://stackoverflow/", "");
var stringWriter = new StringWriter();
var httpResponce = new HttpResponse(stringWriter);
var httpContext = new HttpContext(httpRequest, httpResponce);
var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(),
new HttpStaticObjectsCollection(), 10, true,
HttpCookieMode.AutoDetect,
SessionStateMode.InProc, false);
httpContext.Items["AspSession"] = typeof (HttpSessionState).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance,
null, CallingConventions.Standard,
new[] {typeof (HttpSessionStateContainer)},
null)
.Invoke(new object[] {sessionContainer});
return httpContext;
}
}
आपका प्रश्न वास्तव में क्या है? –
@ ट्रेगेडियन मैं अनुमान लगा रहा हूं "httpSessionStateAfter' शून्य क्यों है लेकिन' httpSessionStateBefour' नहीं है? " – DavidG
आप किस इकाई परीक्षण ढांचे का उपयोग कर रहे हैं? क्या आप वाकई निष्पादन संदर्भों का समर्थन करते हैं? उदाहरण के लिए एनयूनीट के पुराने संस्करण 'प्रतीक्षा' के बारे में कुछ भी नहीं जानते हैं, इसलिए वे निरंतरता को कॉन्फ़िगर नहीं कर सकते हैं। ASP.NET अनुप्रयोगों में निरंतरता * * अलग * थ्रेडपूल थ्रेड पर निष्पादित की जाती है जो मूल निष्पादन संदर्भ –