Как я могу издеваться над процедурой Elmah ErrorSignal?

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

<code>ErrorSignal.FromCurrentContext().Raise(exception);
</code>

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

<code>System.ArgumentNullException: Value cannot be null.
Parameter name: context
</code>

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

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

Спасибо!

Ответы на вопрос(1)

Решение Вопроса

ПосколькуFromCurrentContext() Метод - это статический метод, который вы просто не можете смутить над вызовом. У вас есть два других варианта.

Since FromCurrentContext() internally makes a call to HttpContext.Current you can push a fake context in that. For example:

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

HttpContext.Current= new HttpContext(request);

With this it should not throw the exception anymore since HttpContext.Current is not null.

Create a wrapper class around the call to Raise and just mock out the wrapper class.

public class ErrorSignaler {

    public virtual void SignalFromCurrentContext(Exception e) {
        if (HttpContext.Current != null)
            Elmah.ErrorSignal.FromCurrentContext().Raise(e);
    } 
}
 10 окт. 2012 г., 16:30
Другой вариант: Dim req As System.Web.HttpRequest = New System.Web.HttpRequest (String.Empty, & quot;domain.tld& quot; Ничего) & lt; br / & gt; Dim res As System.Web.HttpResponse = New System.Web.HttpResponse (Nothing) & lt; br / & gt; System.Web.HttpContext.Current = New System.Web.HttpContext (req, res) & lt; br / & gt; System.Web.HttpContext.Current.ApplicationInstance = New System.Web.HttpApplication () & lt; br / & gt;
 11 авг. 2009 г., 22:16
Отличный первый ответ Мэтью, добро пожаловать на SO
 25 авг. 2011 г., 15:05
Это более старый вопрос, поэтому, возможно, все изменилось, но для Elmah 1.1 мне также пришлось инициализировать HttpContext.Current.ApplicationInstance с новым HttpApplication (), чтобы это работало. Спасибо!

Ваш ответ на вопрос