Как я могу издеваться над процедурой Elmah ErrorSignal?
https://stackoverflow.com/questions/1019833
Full question
- c# - asp.net-mvc - mocking - elmah |
- |
вопрос
Мы используем 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);
}
}