2009-06-19 9 views
16

हम अपने ASP.Net MVC सी # आवेदन में और हमारे पकड़ा अपवादों में त्रुटियों से निपटने के लिए ELMAH का उपयोग कर रहे हैं, तो हम कुछ इस तरह कर रहे हैं:मैं एल्मा की त्रुटि सिग्नल दिनचर्या का नकल कैसे कर सकता हूं?

ErrorSignal.FromCurrentContext().Raise(exception); 

लेकिन जब मैं इकाई परीक्षण पकड़ा अपवाद करने की कोशिश, मुझे यह संदेश मिलता है:

System.ArgumentNullException: Value cannot be null. 
Parameter name: context 

मैं FromCurrentContext() कॉल का नकल कैसे कर सकता हूं? क्या इसके अलावा मुझे कुछ और करना चाहिए?

FYI ... हम वर्तमान में Moq और RhinoMocks का उपयोग कर रहे हैं।

धन्यवाद!

उत्तर

33

चूंकि FromCurrentContext() विधि एक स्थैतिक विधि है जिसे आप आसानी से कॉल नहीं कर सकते हैं। आपके पास दो अन्य विकल्प हैं।

  1. FromCurrentContext() के बाद से आंतरिक रूप से एक फोन HttpContext.Current लिए आपको लगता है कि एक नकली संदर्भ धक्का कर सकते हैं बनाता है। उदाहरण के लिए:

    SimpleWorkerRequest request = new SimpleWorkerRequest(
        "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter()); 
    
    HttpContext.Current= new HttpContext(request); 
    
    इस के साथ

    यह बाद से HttpContext.Current रिक्त नहीं है अपवाद अब और फेंक नहीं करना चाहिए।

  2. उठाने के लिए कॉल के चारों ओर एक रैपर वर्ग बनाएं और केवल रैपर वर्ग को नकली करें।

    public class ErrorSignaler { 
    
        public virtual void SignalFromCurrentContext(Exception e) { 
         if (HttpContext.Current != null) 
          Elmah.ErrorSignal.FromCurrentContext().Raise(e); 
        } 
    } 
    
+1

ग्रेट पहले उत्तर मैथ्यू, स्वागत करने के लिए इतना –

+11

यह एक पुराना सवाल तो शायद चीजें बदल गई है, लेकिन Elmah 1.1 के लिए, मैं भी एक नया HttpApplication को HttpContext.Current.ApplicationInstance प्रारंभ करने के लिए किया था () इसके लिए काम करने के लिए। धन्यवाद! – PatrickSteele

+1

एक और विकल्प यह है: Dim req System.Web.HttpRequest = New System.Web.HttpRequest (String.Empty, "https: //www.domain.tld", कुछ भी नहीं)
सिस्टम के रूप में मंद res.Web। HttpResponse = नई System.Web.HttpResponse (कुछ नहीं)
System.Web.HttpContext.Current = नई System.Web.HttpContext (अनुरोध, रिज़ोल्यूशन)
System.Web.HttpContext.Current.ApplicationInstance = नई System.Web.HttpApplication()

संबंधित मुद्दे