Подтвердить что ты не робот

Использование ASSERT и EXPECT в GoogleTest

В то время как макросы ASSERT_ * вызывают завершение тестового примера, макросы EXPECT_ * продолжают оценку. Я хотел бы знать, каковы критерии, чтобы решить, следует ли использовать тот или иной.

4b9b3361

Ответ 1

Используйте ASSERT, когда он критичен для прохождения теста. (Например, если он не пройдет, остальная часть программы не будет работать.) Используйте EXPECT, когда это тест, который может позволить сбой (и позволит вам запускать вашу программу.)

Эмпирическое правило: используйте EXPECT, если вам не нужно что-то работать для цели для тестов, и в этом случае вы должны использовать ASSERT, так как продолжение бессмысленно.


Это отражается в primer:

Обычно EXPECT_* являются предпочтительными, так как они позволяют сообщать о нескольких ошибках в тесте. Тем не менее, вы должны использовать ASSERT_*, если нет смысла продолжать, когда это утверждение не выполняется.

Ответ 2

Используйте EXPECT_, когда вы

  • хотите сообщить о нескольких неудачах в вашем тесте

Используйте ASSERT_, когда

  • Не имеет смысла продолжать, когда утверждение терпит неудачу.

Так как ASSERT_ прерывает вашу функцию немедленно, если она терпит неудачу, код возможной очистки пропускается. Предпочитайте EXPECT_ как ваш по умолчанию.

Ответ 4

В дополнение к предыдущим ответам...

ASSERT_ не завершает выполнение тестового примера. Он возвращает из любой функции, в которой он используется. Помимо отказа от тестового примера, он оценивается как return;, а это означает, что он не может использоваться в функции, возвращающей что-то другое, кроме void. Если вы не в порядке с предупреждением компилятора, то есть.

EXPECT_ выходит из строя, но не return;, поэтому он может использоваться внутри функций любого типа возврата.