我们正在使用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不为null。
  • 在对Raise的调用周围创建包装器类,并模拟出包装器类。
    public class ErrorSignaler {
    
        public virtual void SignalFromCurrentContext(Exception e) {
            if (HttpContext.Current != null)
                Elmah.ErrorSignal.FromCurrentContext().Raise(e);
        }
    }
    
  • 09-25 21:42