Есть ли в Google Test какой-нибудь макрос ASSERT_AND_RETURN
, который что-то проверяет, и если он неверен, вызывает утверждение и возвращает значение?
Утверждать и возвращать макрос в Google Test?
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
Ссылка на документы устарела. Его следует обновить до google.github.io/googletest/ . К сожалению, предложенная очередь редактирования заполнена, и у меня недостаточно репутации, чтобы просмотреть вещи в очереди :(
- person Kerrick Staley; 29.06.2021