2010-09-29 81 views
1

從「單元測試的技術」一書引文:異常如何突破try catch塊?

在犀牛製品,嚴格嘲笑通過調用StrictMock 方法創建的。即使您的測試包含全局try-catch子句,您會認爲 會捕獲隔離框架拋出的異常,但始終會拋出意外的方法調用異常, 。

那麼我該如何在我自己的程序中實現這種行爲呢?

回答

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。

1

您應該永遠不會在您的應用程序中真正擁有這種類型的場景,因爲您不應該捕獲全局例外。你應該只捕獲你將要處理的異常類型,其他的一切應該被允許冒泡。