17

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

ErrorSignal.FromCurrentContext().Raise(exception);

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

System.ArgumentNullException: Value cannot be null.
Parameter name: context

如何模拟 FromCurrentContext() 调用?还有其他我应该做的事情吗?

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

谢谢!

4

1 回答 1

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);
    

    有了这个,它不应该再抛出异常,因为HttpContext.Current它不为空。

  2. 围绕对 Raise 的调用创建一个包装器类,然后模拟包装器类。

    public class ErrorSignaler {
    
        public virtual void SignalFromCurrentContext(Exception e) {
            if (HttpContext.Current != null)
                Elmah.ErrorSignal.FromCurrentContext().Raise(e);
        } 
    }
    
于 2009-08-11T20:07:34.177 回答