2010-02-11 129 views
14

我想知道是否有人知道工具或技術自動將常見故障注入正在運行的.NET程序。這樣的東西.......NET應用程序的故障注入?

  • 在分配時
  • 隨機注入一個OutOfMemoryException隨機注入FileNotFoundException異常時試圖在使用套接字來訪問文件
  • 隨機IO注入或網絡異常。

所以我真的很想在CLR中攔截一些特定的調用,類似於AppVerifier對原生Win32代碼的操作。目的是在開發人員控制之外的許多錯誤條件下測試應用程序,並確保處理這些條件。

+0

拔下網線? – ChaosPandion 2010-02-11 00:48:22

+3

'諷刺'拔下你的記憶? – 2010-02-11 00:51:32

+1

確切地說:)有很多黑客可以爲不同的資源做這件事,但它不會縮放。 – noctonura 2010-02-11 01:03:35

回答

8

有一個codeplex項目叫做TestAPI可以做運行時錯誤注入。你需要看看它的managed code fault injection API。它使用CLR profiling API在運行時攔截方法調用並修改它們的行爲。

看看an example,看看如何在一個已經編譯好的exe文件的方法調用中注入異常。

+0

我通過幾個例子閱讀,我認爲它看起來非常有前途,而且它免費的事實當然有幫助。 – ChaosPandion 2010-02-11 01:11:24

+0

是的 - 這看起來非常好。 – noctonura 2010-02-11 17:14:47

0

我不知道如何「隨機」注入這些東西,但我會建議你嘲笑那些通常不受你控制的部分,並且在你的一些測試中模擬拋出異常。

+0

我感覺他正在談論他想要驗證的大量代碼,所以我懷疑他能夠重新設計所有這些代碼來支持嘲笑。 – ChaosPandion 2010-02-11 01:04:54

+0

我想說這是他的問題,但我理解處理大型遺留代碼庫的困難。我沒有看到一種方法來正確地測試這些場景,而不會重構嘲笑,但也許別人會改變一些東西。 – 2010-02-11 01:06:45

5

Typemock Isolator似乎是你最好的選擇。

如果您想要投入FileNotFoundException來模擬測試,那麼您可以執行以下操作。

在你的產品代碼,你有這樣的方法

public static Project OpenProject(string filePath) 

並在測試代碼,你可以僞造的OpenProject呼叫這樣

Isolate.WhenCalled(()=>Project.OpenProject(nulll)).WillThrow(new FileNotFoundException()); 

當你的代碼打OpenProject,一個FileNotFoundException將被拋出。

1

這不完全符合您的要求,但它與您的應用程序中改進異常處理的相同目標有關並可能有所幫助。

展鵬異常獵人我沒有用過這個特定的產品,但我已經使用其他展鵬產品 http://www.red-gate.com/products/Exception_Hunter/index.htm

是巨大的。