代码之家  ›  专栏  ›  技术社区  ›  James Hay

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

  •  21
  • James Hay  · 技术社区  · 15 年前

    我在工厂中有一个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,但谁说这在未来不会改变。我是否可以纯粹为了单元测试而扩展或模拟枚举类型?

    3 回复  |  直到 15 年前
        1
  •  27
  •   JaredPar    15 年前

    尝试以下操作

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

    确实,您为“默认”情况选择的任何值有一天都可能成为有效值。所以只需添加一个测试来保证它不在您检查默认值的同一个地方。

        2
  •  10
  •   David M    15 年前

    可以将不正确的值强制转换为枚举类型-这不检查。因此,如果val1到val3是1到3,例如,传入:

    (EnumType)(-1)
    
        3
  •  3
  •   bdukes Jon Skeet    15 年前

    可以将枚举的基础类型强制转换为枚举类型,以创建“无效”值。

    Create((EnumType)200);
    
    推荐文章