2009-06-19 38 views
16

我们使用ELMAH来处理我们的ASP.Net MVC C#应用程序,并在我们捕获的异常错误,我们正在做这样的事情:我该如何模拟Elmah的ErrorSignal例程?

ErrorSignal.FromCurrentContext().Raise(exception); 

,但是当我试图单元测试捕获的异常,我收到此消息:

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

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

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

谢谢!

回答

33

由于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); 
        } 
    } 
    
+1

大的第一个答案马修,欢迎SO – 2009-08-11 20:16:45

相关问题