2009-12-01 180 views
19

我有一個工廠switch語句,基於在喜歡的東西通過枚舉的值返回命令的默認情況:如何進行單元測試的基於枚舉switch語句

public ICommand Create(EnumType enumType) 
{ 
    switch (enumType) 
    { 
     case(enumType.Val1): 
     return new SomeCommand(); 
     case(enumType.Val2): 
     return new SomeCommand(); 
     case(enumType.Val3): 
     return new SomeCommand(); 
     default: 
     throw new ArgumentOutOfRangeException("Unknown enumType" + enumType); 
    } 
} 

我目前對於枚舉中的每個值都有一個開關箱。我對這些情況都有單元測試。我如何測試默認情況下會拋出錯誤?顯然,目前我無法傳入一個未知的EnumType,但是誰說這將在未來不會改變。無論如何,我可以純粹爲了單元測試而擴展或模擬EnumType?

回答

26

請嘗試以下

Assert.IsFalse(Enum.IsDefined(typeof(EnumType), Int32.MaxValue); 
Create((EnumType)Int32.MaxValue); 

這是真的,你選擇了「默認」的情況下,任何價值可能有一天會成爲一個有效的值。因此,只需添加一個測試以確保它不在您檢查默認設置的相同位置。

2

您可以將枚舉的基礎類型轉換爲枚舉類型,以創建一個「無效」值。

Create((EnumType)200); 
7

您可以將不正確的值轉換爲您的枚舉類型 - 這不檢查。因此,如果Val1至Val3以1至3爲例,則通過:

(EnumType)(-1)