Como posso zombar rotina ErrorSignal de Elmah?
-
06-07-2019 - |
Pergunta
Estamos usando ELMAH para lidar com erros em nossa aplicação ASP.Net MVC c # e em nossas exceções capturadas, estamos fazendo algo parecido com isto:
ErrorSignal.FromCurrentContext().Raise(exception);
mas quando eu tento teste de unidade as exceções capturadas, eu recebo essa mensagem:
System.ArgumentNullException: Value cannot be null.
Parameter name: context
Como posso ironizar a chamada FromCurrentContext ()? Há outra coisa que eu deveria estar fazendo em vez disso?
FYI ... No momento, estamos usando Moq e RhinoMocks.
Obrigado!
Solução
Uma vez que o método FromCurrentContext()
é um método estático que você não pode simplesmente zombar a chamada para ele. Você tem duas outras opções.
-
Desde
FromCurrentContext()
faz internamente uma chamada paraHttpContext.Current
você pode empurrar um contexto falso nisso. Por exemplo:SimpleWorkerRequest request = new SimpleWorkerRequest( "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter()); HttpContext.Current= new HttpContext(request);
Com isso, ele não deve jogar mais a exceção desde
HttpContext.Current
não é nulo. -
Criar uma classe de invólucro em torno da chamada para levantar e apenas zombar fora da classe wrapper.
public class ErrorSignaler { public virtual void SignalFromCurrentContext(Exception e) { if (HttpContext.Current != null) Elmah.ErrorSignal.FromCurrentContext().Raise(e); } }