异常如何突破try \ catch块?

时间:2010-09-29 13:29:25

标签: c# exception-handling behavior

来自“单元测试艺术”一书的引用:

  

在Rhino Mocks中,通过调用StrictMock创建严格的模拟   方法。将始终抛出意外的方法调用异常,   即使你的测试包含一个你认为的全局try-catch子句   会捕获从隔离框架抛出的这种异常。

那么我怎样才能在我自己的程序中实现这种行为?

2 个答案:

答案 0 :(得分:1)

您应该永远不会在应用程序中使用此类方案,因为您不应该捕获全局异常。你应该只捕获你要处理的异常类型,其他一切都应该被允许冒泡。

答案 1 :(得分:0)

一种方法可能是实施拦截框架,例如Unity.Interception(其他也存在,例如来自Castle)。

使用Unity.Interception,您可以编写ICallHandler的实现,它具有Invoke方法,您可以捕获并重新抛出异常:

public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
    var methodReturn = getNext().Invoke(input, getNext);

    // did the method raise an exception?
    if (methodReturn.Exception != null)
    {
        // handle it... re-throw it if necessary...
    }
}

当然深入研究Rhino.Mocks的源代码将是最直接的方法。至少,使用Reflector并浏览dll。