我正在对几个 XML 文件执行一些验证测试,其中一些文件的名称中包含连字符。我创建了一个包含文件名(不包括扩展名)的参数化测试用例,但 GoogleTest 失败,因为
注意:测试名称必须是非空的、唯一的,并且只能包含 ASCII 字母数字字符或下划线。因为 PrintToString 为 std::string 和 C 字符串添加了引号,所以它不适用于这些类型。
class ValidateTemplates :public testing::TestWithParam<string>
{
public:
struct PrintToStringParamName
{
template <class ParamType>
string operator() (const testing::TestParamInfo<ParamType>& info) const
{
auto file_name = static_cast<string>(info.param);
// Remove the file extension because googletest's PrintToString may only
// contain ASCII alphanumeric characters or underscores
size_t last_index = file_name.find_last_of(".");
return file_name.substr(0, last_index);
}
};
};
INSTANTIATE_TEST_CASE_P(
ValidateTemplates,
ValidateTemplates,
testing::ValuesIn(list_of_files),
ValidateTemplates::PrintToStringParamName());
我的想法是在 PrintToStringParamName 中用非字母数字字符替换下划线来打印文件名。但如果可能的话,我宁愿保持参数化名称与文件名相同。
有没有办法以某种方式绕过这个限制?我无法永久更改文件名,也无法使用其他测试框架。