我怎样才能模仿Elmah的ErrorSignal例程?

Chr*_*way 17 c# asp.net-mvc elmah mocking

我们使用ELMAH处理ASP.Net MVC c#应用程序中的错误,在我们捕获的异常中,我们正在做这样的事情:

ErrorSignal.FromCurrentContext().Raise(exception);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试对捕获的异常进行单元测试时,我得到以下消息:

System.ArgumentNullException: Value cannot be null.
Parameter name: context
Run Code Online (Sandbox Code Playgroud)

如何模拟FromCurrentContext()调用?我还应该做些什么呢?

仅供参考......我们目前正在使用Moq和RhinoMocks.

谢谢!

Mat*_*ela 34

由于该FromCurrentContext()方法是静态方法,因此您不能简单地模拟对它的调用.你还有其他两个选择.

  1. 因为FromCurrentContext()内部打电话给HttpContext.Current你可以推送一个假的上下文.例如:

    SimpleWorkerRequest request = new SimpleWorkerRequest(
        "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter());
    
    HttpContext.Current= new HttpContext(request);
    
    Run Code Online (Sandbox Code Playgroud)

    有了它,它不应再抛出异常,因为HttpContext.Current它不是null.

  2. 围绕调用Raise创建一个包装类,并模拟包装类.

    public class ErrorSignaler {
    
        public virtual void SignalFromCurrentContext(Exception e) {
            if (HttpContext.Current != null)
                Elmah.ErrorSignal.FromCurrentContext().Raise(e);
        } 
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 这是一个较老的问题所以可能事情已经发生了变化,但是对于Elmah 1.1,我还必须将HttpContext.Current.ApplicationInstance初始化为新的HttpApplication()以使其工作.谢谢! (12认同)