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"

没办法太客气!

最佳答案

您可以在单元测试中编写:

convertStateToString(static_cast<StateE>(10));


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

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

相关文章:

c++ - 模板类给出链接器错误

unit-testing - "Serialize" Bamboo 构建?

javascript - Jasmine 之前每个都不叫

sql - 使用表在 MySQL 中提供枚举值?

c++ - 将WSAGetLastError转换为std::exception?

c++ - 删除QJsonArray中的所有元素

android - 从 ANativeWindow_Buffer 获取 ANativeWindowBuffer

ios - 在 XCTestCase 中使用 UIImage imageNamed

java - 字符串(或T)和枚举的父类(super class)

Java枚举、整数和字符串一起定义?