2012-06-05 64 views
0

單元測試這些類型的方法的最佳做法是什麼?單元測試的最佳實踐枚舉翻譯器

public VerificationResultCode Translate(int value) 
    { 
     VerificationResultCode result; 

     if (Enum.IsDefined(typeof(VerificationResultCode), (int)value)) 
      result = (VerificationResultCode)((int)value); 
     else 
      throw new UnknownResultReturnFromGatewayException(); 

     return result; 
    } 

VerificationResultCode是枚舉類型,如:

public enum VerificationResultCode 
{ 
     BankingNetworkError = 100, 
     NotEqual =101, 
     InputFormatError = 102, 
     MerchantAuthenticationFailed = 103, 

... 
} 

我們應該寫爲每個枚舉成員的單個測試方法或只寫一個一個試驗方法有很多斷言呢?!

+2

其中之一,你不應該整數編碼爲雙打。你會有虛假的失敗。 – usr

+4

兩個測試。一個值正確,一個值不正確。注意你沒有得到一個異常,然後你確實得到一個異常。除此之外,您還可以單元測試CLR從一個整數轉換爲枚舉的能力。 –

+0

@usr Thansk!其編輯。 – Navid

回答

2

這段代碼對單元測試來說太簡單了。您應該單元測試取決於VerificationResultCode的行爲,這也將測試Translate函數。更大的問題是,爲什麼你需要一個公共翻譯函數而不是將其封裝在對象中?

+0

它是我們嘗試重構,增強和增加一些單元測試的一個來自Brownfield應用程序的小片段。 – Navid

+2

如果您重構遺留代碼,那麼您需要以足夠大的粒度選擇測試接縫,以便在測試中重構。單元測試像你的例子那樣的小型翻譯功能可能會適得其反,因爲當你重構時你會打破幾十個這樣的微單元測試。 –

+0

感謝您的回答。你說這個代碼對於單元測試來說太微不足道了。但這部分是一些支付網關的小片段,它有很多Web服務調用和數據訪問邏輯。我想如果我測試依賴於枚舉的行爲它有點像集成測試。 – Navid