Использование Google Test для модульного теста оболочки assert, которая может дополнительно включать информацию __FILE__
и __LINE__
в сообщение об ошибке.
void My_Assert (bool test)
{
#if USE_FILE_MACRO
std::cerr << "fatal error: false in file __FILE__ at line __LINE__\n"
#else
std::cerr << "fatal error: false\n"
#endif
throw std::runtime_error ("Fatal error");
}
Я хочу убедиться, что для этого теста файл и строка не включены, поэтому я хочу, чтобы ASSERT_DEATH
соответствовало только "фатальной ошибке: false", а не "фатальной ошибке: false в файле my_file.cpp по адресу строка 42". Вот с чего я начинаю:
ASSERT_DEATH( try {My_Assert (false);} catch (...){exit(1);}, "fatal error: false" );
Я попытался добавить знак доллара, чтобы он соответствовал концу строки, но это не соответствует «фатальной ошибке: ложь». Я пробовал разные варианты \s
, [:space:]
безуспешно. Возможно, я неправильно понимаю документ, и знак доллара не соответствует концу строки в регулярном выражении gtest: я не могу сказать, соответствует ли оператор «концу строки (не каждой строки)» в расширенное руководство здесь относится только к регулярному выражению Windows или ко всем системам. Я компилирую для OSX, используя LLVM версии 7.3.0 (clang-703.0.31).
ASSERT_DEATH()
ожидает, что ваша программа выйдет с ненулевым кодом выхода на 1-м месте, прежде чем регулярное выражение будет проверено. Вы, вероятно, используете его неправильно. - person πάντα ῥεῖ   schedule 05.08.2016fatal error: false
, которое, очевидно, не работает, потому что оно будет соответствовать фатальной ошибке: falseFOLLOWED_BY_ANYTHING_AT_ALL_OR_NOTHING. Я попробовал"fatal error: false$"
, который не соответствует фатальной ошибке: false (не говоря уже о том, что не соответствует фатальной ошибке: false и другим вещам). - person kslattery   schedule 05.08.2016fatal error: false
? - person Laurel   schedule 05.08.2016false
в конце строки и строки. Используйте($|\n)
. - person Wiktor Stribiżew   schedule 05.08.2016