Как сигнализировать о том, что тест хочет пропустить сам

У меня есть набор тестовых примеров типизированных в Google Тесте. Однако некоторые из этих тестовых случаев просто не применимы для определенного параметра типа. Рассмотрим этот пример типизированного тестового примера:

TYPED_TEST_P(TheTest, ATest){
    if(TypeParam::isUnsuitedForThisTest()){
        return;
    }
    // ... real test code goes here
}

Это хорошо работает, тест просто пропущен. Однако при выполнении тестов я вижу обычный

[ RUN      ] XYZ/TheTest/0.ATest
[       OK ] XYZ/TheTest/0.ATest (0 ms) 

поэтому не очевидно, что тест был пропущен, похоже, что он просто преуспел. Я хочу как-то показать, что тестовый пример был пропущен. Есть ли какой-то метод в тесте google, чтобы сообщить, что тестовый пример был пропущен. Что-то вроде этого (этого не существует):

TYPED_TEST_P(TheTest, ATest){
    if(TypeParam::isUnsuitedForThisTest()){
        SIGNAL_SKIPPED(); // This is what I would like to have
        return;
    }
    // ... real test code goes here
}

Затем выход изменится на примерно так:

[ RUN      ] XYZ/TheTest/0.ATest
[  SKIPPED ] XYZ/TheTest/0.ATest (0 ms)

Есть ли функция в gtest, которая позволяет такое поведение?

Ответ 1

Я придумал простое, но приемлемое решение:

Просто распечатайте дополнительную строку пропуска с помощью макроса:

#define CHECK_FEATURE_OR_SKIP(FEATURE_NAME) \
do{\
  if(!TypeParam::hasFeature(FEATURE_NAME)) {\
     std::cout << "[  SKIPPED ] Feature " << #FEATURE_NAME << "not supported" << std::endl;\
     return;\
  }\
} while(0)

Тогда я могу просто использовать этот макрос:

TYPED_TEST_P(TheTest, ATest){
    CHECK_FEATURE_OR_SKIP(MyFeatureXY);
    // ... real test code goes here
}

Результат будет выглядеть следующим образом:

[ RUN      ] XYZ/TheTest/0.ATest
[  SKIPPED ] Feature MyFeatureXY not supported 
[       OK ] XYZ/TheTest/0.ATest (0 ms)

Единственный небольшой недостаток заключается в том, что все еще существует строка OK, но, по крайней мере, очевидно, что тестовый пример был пропущен, а также отсутствующая функция отображается аккуратно. Другой недостаток заключается в том, что графический пользовательский интерфейс GUI не будет отображать пропуски, которые аккуратно, но меня это не волнует, поскольку я использую только инструменты командной строки для запуска тестовых случаев.