Доброго времени суток!
Если есть тест на gtest, в фикстуре есть методы (очень большие, переписывать месяцы), которые генерят фейлы внутри себя, а очень хочется эти фейлы обработать, чтобы не зафейлить весь тест:
Т.е. сделать как-то так:
if(HasAnyFailure(SomeMethod())){
doSmth1();
}else{
doSmth2();
}
Самое похожее, что я находил — сделать изнутри метода
if(HasFatalFailure() || HasFailure()){
SUCCEED();
}
Это работает в плане того, что можно сделать что-то в зависимости от результата, но тест фейлится все равно. Можно ли в gtest проигнорировать фейлы какой-либо функции?
Спасибо!
Здравствуйте, plastictown, Вы писали:
P>Если есть тест на gtest, в фикстуре есть методы (очень большие, переписывать месяцы), которые генерят фейлы внутри себя, а очень хочется эти фейлы обработать, чтобы не зафейлить весь тест:
P>Т.е. сделать как-то так:
P>P>if(HasAnyFailure(SomeMethod())){
P> doSmth1();
P>}else{
P> doSmth2();
P>}
P>
Ну вот прямо так с if-ом я сомневаюсь, что можно сделать.
В gtest для обработки assert есть макросы EXPECT_DEBUG_DEATH и ASSERT_DEBUG_DEATH.
Вторым аргументом передается регэксп для матчинга текста конкретного assert или пустая строка для отлова всех.
Если вдруг ассерты включены в релизной сборке, то надо пользоваться просто EXPECT_DEATH/ASSERT_DEATH.
Для смертельных тестов gtest создает отдельный процесс, который может крашится или нет.
Успех теста может означать, что процесс крашнулся по ассерту с определенным текстом.
При этом, последующие тесты будут выполняться, как положено.