Как я могу издеваться над процедурой Elmah ErrorSignal?
-
06-07-2019 - |
Вопрос
Мы используем ELMAH для обработки ошибок в нашем приложении ASP.Net MVC c # и в наших перехваченных исключениях мы делаем что-то вроде этого:
ErrorSignal.FromCurrentContext().Raise(exception);
но когда я пытаюсь модульно протестировать пойманные исключения, я получаю это сообщение:
System.ArgumentNullException: Value cannot be null.
Parameter name: context
Как я могу издеваться над вызовом FromCurrentContext()?Есть ли что-то еще, что я должен делать вместо этого?
К твоему сведению...В настоящее время мы используем Moq и RhinoMocks.
Спасибо!
Решение
С тех пор как 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); } }