异常如何突破try \ catch块?

问题描述:

从“单元测试的技术”一书引文:异常如何突破try catch块?

在犀牛制品,严格嘲笑通过调用StrictMock 方法创建的。即使您的测试包含全局try-catch子句,您会认为 会捕获隔离框架抛出的异常,但始终会抛出意外的方法调用异常, 。

那么我该如何在我自己的程序中实现这种行为呢?

一种方式可能是实施拦截框架,如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。

您应该永远不会在您的应用程序中真正拥有这种类型的场景,因为您不应该捕获全局例外。你应该只捕获你将要处理的异常类型,其他的一切应该被允许冒泡。