2013-09-05 82 views
2

我想測試處理消息的給定實例會導致處理失敗。但是我看不到這樣做的方式,因爲處理程序中引發的任何異常都不會冒泡到測試代碼中,並且似乎沒有任何內置的內容。nservicebus 3.2測試預期的失敗

理想我想這樣做:

Test.Handler<TransactionCreatedHandler>() 
        .ExpectFailure() 
        .OnMessage(financialTransaction, Guid.NewGuid().ToString()); 

我知道正確的事情是消除任何處理代碼出了處理程序和測試孤立,但我還是想知道,如果有一種方法可以做到這一點。

有沒有人有任何想法?

+0

在你自己的擴展Handler類之外,我沒有看到一個選項。 –

回答

2

我已經解決了這個問題,通過在測試中包裝Test.Handler並捕獲TargetInvocationException,然後斷言InnerException

try 
{ 
    Test.Handler<TransactionCreatedHandler>() 
     .OnMessage(financialTransaction, Guid.NewGuid().ToString()); 
} 
catch (TargetInvocationException ex) 
{ 
    // Asserts against ex.InnerException 
    ... 
} 

顯然,這將創建一個更改爲NSB的實施將打破這些測試的風險,雖然這是一個我願意承擔。

結合了來自Daniel Marbach評論:

在5版和行爲改變較高。測試庫不再拋出TargetInvocationException,而是拋出句柄方法中發生的實際異常。只是一個頭 -

+0

在版本5和更高版本中,行爲已更改。測試庫不再拋出TargetInvocationException,而是拋出句柄方法中發生的實際異常。只是一個領導 –

+0

@DanielMarbach謝謝你。我已經更新了答案以反映。 –