2009-12-01 182 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)