Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我怎么能嘲笑Elmah';什么是错误信号程序?_C#_Asp.net Mvc_Mocking_Elmah - Fatal编程技术网

C# 我怎么能嘲笑Elmah';什么是错误信号程序?

C# 我怎么能嘲笑Elmah';什么是错误信号程序?,c#,asp.net-mvc,mocking,elmah,C#,Asp.net Mvc,Mocking,Elmah,我们使用ELMAH处理ASP.Net MVC应用程序中的错误,在捕获的异常中,我们做了如下操作: ErrorSignal.FromCurrentContext().Raise(exception); 但是,当我尝试对捕获的异常进行单元测试时,我得到以下消息: System.ArgumentNullException: Value cannot be null. Parameter name: context 如何模拟FromCurrentContext()调用? 还有什么我应该做的吗 仅供参

我们使用ELMAH处理ASP.Net MVC应用程序中的错误,在捕获的异常中,我们做了如下操作:

ErrorSignal.FromCurrentContext().Raise(exception);
但是,当我尝试对捕获的异常进行单元测试时,我得到以下消息:

System.ArgumentNullException: Value cannot be null.
Parameter name: context
如何模拟FromCurrentContext()调用? 还有什么我应该做的吗

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


谢谢

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

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

    SimpleWorkerRequest request = new SimpleWorkerRequest(
        "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter());
    
    HttpContext.Current= new HttpContext(request);
    
    由于
    HttpContext.Current
    不是null,因此它不应该再抛出异常

  • 围绕要引发的调用创建一个包装器类,并模拟包装器类

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

  • 这是一个较老的问题,因此可能情况有所改变,但对于Elmah 1.1,我还必须将HttpContext.Current.ApplicationInstance初始化为一个新的HttpApplication(),才能正常工作。谢谢另一个选项是:Dim req As System.Web.HttpRequest=New System.Web.HttpRequest(String.Empty,“,Nothing)
    Dim res As System.Web.HttpResponse=New System.Web.HttpResponse(Nothing)
    System.Web.HttpContext.Current=New System.Web.HttpContext(req,res)
    System.Web.HttpContext.Current.ApplicationInstance=New System.Web.HttpApplication()