Как уже упоминалось в комментарии @Yksisarvinen, вы можете использовать макрос EXPECT_NO_FATAL_FAILURE
(или его ASSERT
аналог). Это работает, даже если подпрограмма subcheck
содержит только несмертельные утверждения. В случае вашего примера вот как вы бы это проверили:
void subcheck () {
EXPECT_EQ(1, 3) << "This failed"; // Will be printed
}
void check () {
EXPECT_EQ(1, 2);
EXPECT_NO_FATAL_FAILURE(subcheck()) << "This failed"; // Will not be printed although it compiles
}
Вывод:
/path/to/test.cpp:580: Failure
Value of: 2
Expected: 1
/path/to/test.cpp:582 Failure
Value of: 3
Expected: 1
This failed
Другой подход, который вы можете использовать, - это использовать testing::AssertionResult
. Вот пример:
testing::AssertionResult subcheck2 () {
return 1 == 3 ? testing::AssertionSuccess() : testing::AssertionFailure();
}
void check ()
{
EXPECT_EQ(1, 2);
EXPECT_EQ(testing::AssertionSuccess(), subcheck2()) << "This failed"; // Will be printed
}
На этот раз вывод выглядит так:
/path/to/test.cpp:580: Failure
Value of: 2
Expected: 1
/path/to/test.cpp:582: Failure
Value of: subcheck2()
Actual: 0
Expected: testing::AssertionSuccess()
Which is: 1
This failed
С учетом всего вышесказанного я бы посоветовал вам пересмотреть свою стратегию тестирования, поскольку, похоже, ваши тесты слишком сложны. Следование «правилу одного ассерта» может быть трудным и не всегда выполнимым, но вы все равно стремитесь к нему, когда это возможно. Надеюсь, это поможет!