C# 我怎么能嘲笑Elmah';什么是错误信号程序?
我们使用ELMAH处理ASP.Net MVC应用程序中的错误,在捕获的异常中,我们做了如下操作: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()调用? 还有什么我应该做的吗 仅供参
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()