Wie kann ich Elmah die ErrorSignal Routine verspotten?
-
06-07-2019 - |
Frage
Wir verwenden ELMAH für Fehler in unseren ASP.Net MVC c # Anwendung und in unserer gefangen Ausnahmen Handhabung wir tun so etwas wie folgt aus:
ErrorSignal.FromCurrentContext().Raise(exception);
aber wenn ich Unit-Test, die gefangenen Ausnahmen versuchen, erhalte ich diese Meldung:
System.ArgumentNullException: Value cannot be null.
Parameter name: context
Wie kann ich die FromCurrentContext () aufrufen, verspotten? Gibt es etwas, was ich stattdessen tun sollte?
Zu Ihrer Information ... Wir sind derzeit mit Moq und RhinoMocks.
Danke!
Lösung
Da die FromCurrentContext()
Methode eine statische Methode ist, kann man einfach nicht den Anruf, um es verspotten. Sie tun zwei andere Optionen haben.
-
Da
FromCurrentContext()
intern einen Anruf Sie, dass ein gefälschten Kontext schieben könnenHttpContext.Current
macht. Zum Beispiel:SimpleWorkerRequest request = new SimpleWorkerRequest( "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter()); HttpContext.Current= new HttpContext(request);
Damit sollte es nicht die Ausnahme wirft mehr da
HttpContext.Current
nicht null ist. -
Erstellen Sie eine Wrapper-Klasse um den Anruf zu heben und verspotten nur die Wrapper-Klasse.
public class ErrorSignaler { public virtual void SignalFromCurrentContext(Exception e) { if (HttpContext.Current != null) Elmah.ErrorSignal.FromCurrentContext().Raise(e); } }