异常如何突破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。
答
您应该永远不会在您的应用程序中真正拥有这种类型的场景,因为您不应该捕获全局例外。你应该只捕获你将要处理的异常类型,其他的一切应该被允许冒泡。