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!

Foi útil?

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.

  1. Desde FromCurrentContext() faz internamente uma chamada para HttpContext.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.

  2. 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);
        } 
    }
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top