代码之家  ›  专栏  ›  技术社区  ›  Chris Conway

我怎么能模仿埃尔玛的错误信号程序?

  •  17
  • Chris Conway  · 技术社区  · 15 年前

    我们正在使用elmah来处理ASP.NET MVC应用程序中的错误,在捕获的异常中,我们正在执行以下操作:

    ErrorSignal.FromCurrentContext().Raise(exception);
    

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

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

    如何模拟fromCurrentContext()调用? 我还有别的事要做吗?

    FYI…我们目前正在使用MOQ和犀牛模型。

    谢谢!

    1 回复  |  直到 11 年前
        1
  •  34
  •   Darko    13 年前

    自从 FromCurrentContext() 方法是一个静态方法,不能简单地模拟对它的调用。你还有两个选择。

    1. 自从 来自当前上下文() 内部呼叫 HttpContext.Current 你可以在其中添加一个虚假的上下文。例如:

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

      有了这个,它就不应该再抛出异常了,因为 httpContext.current当前 不是空的。

    2. 围绕要引发的调用创建一个包装类,并模拟包装类。

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