来自“单元测试艺术”一书的引用:
在Rhino Mocks中,通过调用StrictMock创建严格的模拟 方法。将始终抛出意外的方法调用异常, 即使你的测试包含一个你认为的全局try-catch子句 会捕获从隔离框架抛出的这种异常。
那么我怎样才能在我自己的程序中实现这种行为?
答案 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。