我有一个看起来像这样的函数:
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/