2009-09-06 133 views
2

我看过这篇文章,但我有点困惑它。如何模拟Elmah?

How can I mock Elmah's ErrorSignal routine?

我在看选项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); 
} 

} 

我有点糊涂,虽然由事实,这似乎并没有实现一个接口,我真的不知道为什么它似乎是用于某种继承。

感谢

回答

2

这里的想法是,你可以使用ErrorSignaler类在代码中发出一个错误信号,而不是直接调用ELMAH的。在单元测试中运行代码时,因为HttpContext.Current为空,所以不会使用Elmah组件,并且不会有任何空引用异常。

你也可以创建一个ErrorSignaler接口:

public interface IErrorSignaler 
{ 
    void SignalFromCurrentContext(Exception e); 
} 

这样用来实现IErrorSignaler实现可以在单元测试中如果需要的话被嘲笑。

+0

雅这就是我最终做的,然后我嘲笑它。我只是想知道这个人有“虚拟” – chobo2 2009-09-07 18:24:04

+0

这将允许他继承ErrorSignaler以添加更多的行为到'Signal'方法。这种灵活性在某些情况下可能有用。 – 2009-09-07 18:30:07