如何对基于枚举的switch语句的默认情况进行单元测试

37

我有一个 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);
   }
}

目前我为枚举中的每个值编写了一个switch case。我为每个case编写了单元测试。如何对默认情况进行单元测试以抛出错误?显然,此时我无法传入未知的EnumType,但谁能保证这不会在将来发生变化。是否有任何方式可以仅为了单元测试而扩展或模拟EnumType?

3个回答

39

尝试以下方法

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

确实,你为"default"情况选择的任何值都可能有一天成为有效值。因此,在检查默认值的地方添加一个测试来确保它不会成为有效值。


对我来说,似乎这默认为第一个枚举值,而不是无效的枚举。 - Adam B

19

您可以将一个不正确的值转换为枚举类型 - 这并不会进行检查。因此,如果Val1到Val3例如是1到3,请传入:

(EnumType)(-1)

4
你可以将枚举的底层类型转换为枚举类型,以创建一个“无效”值。
Create((EnumType)200);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接