Утверждать и возвращать макрос в Google Test?

Есть ли в Google Test какой-нибудь макрос ASSERT_AND_RETURN, который что-то проверяет, и если он неверен, вызывает утверждение и возвращает значение?


person Djordje Zivanovic    schedule 23.08.2016    source источник
comment
ASSERT_xxx провалит тест и остановит его. Вы имели в виду EXPECT_AND_RETURN?   -  person Richard Hodges    schedule 24.08.2016
comment
Почему я должен называть это ожидаемым, если ожидаемое в gtest означает продолжение вперед? Я имею в виду что-то вроде этого: bool Foo() { ... ASSERT_AND_RETURN(x!= 0, false); интервал у = 1 / х; ... }   -  person Djordje Zivanovic    schedule 25.08.2016


Ответы (1)


На самом деле каждый ASSERT_XXX возвращается из функции, но не возвращает значения - предполагается, что функция (в большинстве случаев функции, созданные макросами TESTxx) являются недействительными.

Это иногда проблема, когда вы используете ASSERT_XXX внутри функции, вызываемой из другой функции. Чтобы проверить, не произошла ли ошибка при утверждении, вам нужно использовать ASSERT_NO_FATAL_FAILURE.

См. пример

void assertNotNull(int *p)
{
    ASSERT_THAT(p, NotNull(p));
}
void assertSizeIs(int actual, int expected)
{
    ASSERT_EQ(actual, expected);
}
TEST(A, B)
{
   std::pair<int*,int> p = createArray(7);

   ASSERT_NO_FATAL_FAILURE(assertNotNull(p.first));
   ASSERT_NO_FATAL_FAILURE(assertSizeIs(p.second, 7));
   
   for( int i = 0; i < 7; ++i) 
      ASSERT_EQ(0, p.first[i]);
}
person PiotrNycz    schedule 25.08.2016