2009-06-19 11 views
16

Używamy ELMAH do obsługi błędów w naszej ASP.Net MVC aplikacji C# iw naszych złowionych wyjątkami, robimy coś takiego:Jak mogę wyśmiać rutynę ErrorSignal Elmah?

ErrorSignal.FromCurrentContext().Raise(exception); 

ale przy próbie badanej jednostki te złowione wyjątków, Otrzymuję tę wiadomość:

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

Jak mogę sfałszować wywołanie FromCurrentContext()? Czy jest coś innego, co powinienem robić?

FYI ... Obecnie używamy Moq i RhinoMocks.

Dzięki!

Odpowiedz

33

Ponieważ metoda FromCurrentContext() jest metodą statyczną, nie można po prostu kpić z niej. Masz dwie inne opcje.

  1. Od FromCurrentContext() wewnętrznie powoduje wywołanie HttpContext.Current możesz popchnąć fałszywy kontekst, w który. Na przykład:

    SimpleWorkerRequest request = new SimpleWorkerRequest(
        "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter()); 
    
    HttpContext.Current= new HttpContext(request); 
    

    Z tym nie powinno rzucać wyjątek od HttpContext.Current już nie jest null.

  2. Utwórz klasę opakowania wokół wywołania, aby podnieść i po prostu wyśmiewać klasę opakowania.

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

Wielka pierwsza odpowiedź Matthew, zapraszamy do SO –

+11

Jest to starsza pytanie więc może wiele rzeczy się zmieniło, ale ELMAH 1.1, musiałem również zainicjować HttpContext.Current.ApplicationInstance do nowego HttpApplication (), aby to działało. Dzięki! – PatrickSteele

+1

Inna opcja jest następująca: Dim req As System.Web.HttpRequest = Nowy System.Web.HttpRequest (String.Empty, "https: //www.domain.tld", Nic)
Dim res As System.Web. HttpResponse = Nowa System.Web.HttpResponse (Nic)
System.Web.HttpContext.Current = Nowa System.Web.HttpContext (req, res)
System.Web.HttpContext.Current.ApplicationInstance = Nowa System.Web.HttpApplication()