¿Cómo puedo burlarme de la rutina ErrorSignal de Elmah?
-
06-07-2019 - |
Pregunta
Estamos usando ELMAH para manejar errores en nuestra aplicación ASP.Net MVC c # y en nuestras excepciones detectadas, estamos haciendo algo como esto:
ErrorSignal.FromCurrentContext().Raise(exception);
pero cuando intento probar la unidad las excepciones detectadas, recibo este mensaje:
System.ArgumentNullException: Value cannot be null.
Parameter name: context
¿Cómo puedo burlarme de la llamada FromCurrentContext ()? ¿Hay algo más que debería hacer en su lugar?
FYI ... Actualmente estamos usando Moq y RhinoMocks.
¡Gracias!
Solución
Dado que el método FromCurrentContext ()
es un método estático, no puede simplemente burlarse de la llamada. Tienes otras dos opciones.
-
Dado que
FromCurrentContext ()
realiza una llamada interna aHttpContext.Current
puede insertar un contexto falso en eso. Por ejemplo:SimpleWorkerRequest request = new SimpleWorkerRequest( "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter()); HttpContext.Current= new HttpContext(request);
Con esto ya no debería lanzar la excepción ya que
HttpContext.Current
no es nulo. -
Cree una clase de contenedor alrededor de la llamada a Raise y simplemente simule la clase de contenedor.
public class ErrorSignaler { public virtual void SignalFromCurrentContext(Exception e) { if (HttpContext.Current != null) Elmah.ErrorSignal.FromCurrentContext().Raise(e); } }