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

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));


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

09-06 18:30