我怎样才能模仿Elmah的ErrorSignal例程?
-
06-07-2019 - |
题
我们正在使用ELMAH处理ASP.Net MVC c#应用程序中的错误,在我们捕获的异常中,我们正在做这样的事情:
ErrorSignal.FromCurrentContext().Raise(exception);
但是当我尝试对捕获的异常进行单元测试时,我收到了这样的消息:
System.ArgumentNullException: Value cannot be null.
Parameter name: context
如何模拟FromCurrentContext()调用? 我还应该做些什么呢?
仅供参考......我们目前正在使用Moq和RhinoMocks。
谢谢!
解决方案
由于 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,所以不应再抛出异常。 -
围绕调用Raise创建一个包装类,并模拟包装类。
public class ErrorSignaler { public virtual void SignalFromCurrentContext(Exception e) { if (HttpContext.Current != null) Elmah.ErrorSignal.FromCurrentContext().Raise(e); } }
醇>
不隶属于 StackOverflow