#googletest #parameterization #non-alphanumeric
#googletest #параметризация #не буквенно-цифровые
Вопрос:
Я выполняю некоторые проверочные тесты для нескольких 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>amp; 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 . Но я бы предпочел, чтобы параметризованные имена совпадали с именами файлов, если это возможно.
Есть ли способ как-то обойти это ограничение? Я не могу постоянно изменять имена файлов и не могу использовать другую среду тестирования.
Комментарии:
1. Можете ли вы показать какой-нибудь код? Google Test не устанавливает принудительную связь между именами файлов и именами тестов.
2. Добавил немного кода. Я хотел бы, чтобы имена тестов совпадали с именами файлов для большей ясности, если это возможно.
Ответ №1:
Это невозможно. Вы уже процитировали соответствующий комментарий из документации. Причина в том, что Google Test использует имя теста для генерации идентификаторов C (имен классов). Идентификаторы C ограничены буквенно-цифровыми символами (и символами подчеркивания, но вы не должны использовать символы подчеркивания в именах тестов).
Самое близкое, что вы можете сделать, это изменить реализацию PrintToStringParamName::operator()()
и удалить не буквенно-цифровые символы из имени файла.