我如何模拟 Elmah 的 ErrorSignal 例程?

发布于 2024-07-25 05:09:51 字数 400 浏览 5 评论 0原文

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

ErrorSignal.FromCurrentContext().Raise(exception);

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

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

How can I mock FromCurrentContext() 调用? 我还应该做其他事情吗?

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

谢谢!

We're using ELMAH for handling errors in our ASP.Net MVC c# application and in our caught exceptions, we're doing something like this:

ErrorSignal.FromCurrentContext().Raise(exception);

but when I try to unit test the caught exceptions, I get this message:

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

How can I mock the FromCurrentContext() call?
Is there something else I should be doing instead?

FYI... We're currently using Moq and RhinoMocks.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆离笙 2024-08-01 05:09:51

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

  1. 由于 FromCurrentContext() 在内部调用 HttpContext.Current,因此您可以在其中推送虚假上下文。 例如:

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

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

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

    公共类ErrorSignaler { 
    
          公共虚拟无效SignalFromCurrentContext(异常e){ 
              if (HttpContext.Current != null) 
                  Elmah.ErrorSignal.FromCurrentContext().Raise(e); 
          }  
      } 
      

Since the FromCurrentContext() method is a static method you can't simply mock the call to it. You do have two other options.

  1. Since FromCurrentContext() internally makes a call to HttpContext.Current you can push a fake context in that. For example:

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

    With this it should not throw the exception anymore since HttpContext.Current is not null.

  2. Create a wrapper class around the call to Raise and just mock out the wrapper class.

    public class ErrorSignaler {
    
        public virtual void SignalFromCurrentContext(Exception e) {
            if (HttpContext.Current != null)
                Elmah.ErrorSignal.FromCurrentContext().Raise(e);
        } 
    }
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文