從「單元測試的技術」一書引文:異常如何突破try catch塊?
在犀牛製品,嚴格嘲笑通過調用StrictMock 方法創建的。即使您的測試包含全局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。
您應該永遠不會在您的應用程序中真正擁有這種類型的場景,因爲您不應該捕獲全局例外。你應該只捕獲你將要處理的異常類型,其他的一切應該被允許冒泡。