c++ - 是否可以将非枚举值作为枚举函数参数传递?

标签 c++ unit-testing enums reinterpret-cast

我有一个看起来像这样的函数:

std::string SomeClass::convertStateToString(StateE state) const
{
  std::string stateAsString;
  switch (state)
  {
    case UNKNOWN:
      stateAsString = "UNKNOWN";
      break;
    case OFFLINE:
      stateAsString = "OFFLINE";
      break;
    case ENABLED:
      stateAsString = "ENABLED";
      break;
    case DISABLED:
      stateAsString = "DISABLED";
      break;
    default:
      stateAsString = "ABNORMAL";
      break;
  }
  return stateAsString;
}

其中 StateE 定义为:

typedef enum
{
  UNKNOWN      = 0,
  OFFLINE      = 1,
  ENABLED      = 2,
  DISABLED     = 3
} StateE;

出于单元测试的目的,我想将一些错误数据提供给 convertStateToString 并验证我是否返回了 "ABNORMAL"。这可能吗?

换句话说,是否可以将枚举范围之外的值作为输入参数传递给函数签名表明参数是枚举类型的函数?

在尝试了指针和reinterpret_cast 之后,我几乎准备好声称函数convertStateToString 在任何情况下都不能返回"ABNORMAL".

没有方法是太hackish了!

最佳答案

你可以在你的单元测试中这样写:

convertStateToString(static_cast<StateE>(10));

这将强制您的代码传递开关/案例的“默认值”。

关于c++ - 是否可以将非枚举值作为枚举函数参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29034619/

相关文章:

java - 枚举映射和流

Flutter 不适用于 switch 语句的自定义枚举

c# - .NET Framework 从 3.5 升级到 4.6 后 C/C++ DLL 失败

c++ - SCDynamicStoreContext 的函数指针字段有什么用?

java - PowerMock 构造函数模拟不起作用

unit-testing - Gradle Task失败,因为JSHint检测到代码方面的改进

c++ - 在 Direct2D 中实现一个简单的 lookAt-like 相机

c++ - 将指向结构的指针返回到主函数,出现段错误

c# - 具有 IHttpActionResult 返回类型和映射数据的方法的 Asp.net 单元测试

C++ 可变参数模板来替换类型列表