Как я могу искупить рутину Elmah ErrorSignal?

Мы используем ELMAH для обработки ошибок в нашем приложении ASP.Net MVC С#, и в наших пойманных исключениях мы делаем что-то вроде этого:

ErrorSignal.FromCurrentContext().Raise(exception);

но когда я пытаюсь выполнить unit test обнаруженные исключения, я получаю это сообщение:

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

Как я могу высмеять вызов FromCurrentContext()? Есть ли что-то еще, что я должен делать вместо этого?

FYI... В настоящее время мы используем Moq и RhinoMocks.

Спасибо!

Ответы

Ответ 1

Так как метод FromCurrentContext() является статическим методом, вы не можете просто издеваться над ним. У вас есть еще два варианта.

  • Так как FromCurrentContext() делает внутренний вызов HttpContext.Current, вы можете подталкивать поддельный контекст. Например:

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

    С этим он больше не должен генерировать исключение, так как HttpContext.Current не является нулевым.

  • Создайте класс оболочки вокруг вызова Raise и просто издевайтесь над классом-оболочкой.

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