Вопрос
Я видел этот пост, но он меня смутил.
Как я могу высмеять процедуру ErrorSignal Элмы?
рассматриваю вариант 2
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);
}
}
Меня немного смущает тот факт, что это, похоже, не реализует интерфейс, и я не совсем уверен, почему он предназначен для какого-то наследования.
Спасибо
Решение
Идея здесь состоит в том, что вы должны использовать ErrorSignaler
class в вашем коде, чтобы сигнализировать об ошибке вместо прямого вызова Elmah.При запуске вашего кода в модульных тестах, поскольку HttpContext.Current
имеет значение NULL, компонент Elmah не будет использоваться и не будет никаких исключений для нулевых ссылок.
Вы также можете создать ErrorSignaler
интерфейс:
public interface IErrorSignaler
{
void SignalFromCurrentContext(Exception e);
}
Таким образом, реализация, используемая для реализации IErrorSignaler
при необходимости можно высмеивать в модульных тестах.