В то время как макросы ASSERT_ * вызывают завершение тестового примера, макросы EXPECT_ * продолжают оценку. Я хотел бы знать, каковы критерии, чтобы решить, следует ли использовать тот или иной.
Использование ASSERT и EXPECT в GoogleTest
Ответ 1
Используйте ASSERT
, когда он критичен для прохождения теста. (Например, если он не пройдет, остальная часть программы не будет работать.) Используйте EXPECT
, когда это тест, который может позволить сбой (и позволит вам запускать вашу программу.)
Эмпирическое правило: используйте EXPECT
, если вам не нужно что-то работать для цели для тестов, и в этом случае вы должны использовать ASSERT
, так как продолжение бессмысленно.
Это отражается в primer:
Обычно
EXPECT_*
являются предпочтительными, так как они позволяют сообщать о нескольких ошибках в тесте. Тем не менее, вы должны использоватьASSERT_*
, если нет смысла продолжать, когда это утверждение не выполняется.
Ответ 2
Используйте EXPECT_
, когда вы
- хотите сообщить о нескольких неудачах в вашем тесте
Используйте ASSERT_
, когда
- Не имеет смысла продолжать, когда утверждение терпит неудачу.
Так как ASSERT_
прерывает вашу функцию немедленно, если она терпит неудачу, код возможной очистки пропускается.
Предпочитайте EXPECT_
как ваш по умолчанию.
Ответ 3
Проверьте следующую ссылку: Эффективное тестирование на С++ с помощью GoogleTest (слайд 23). Существует хорошее руководство/рекомендации по использованию EXPECT vs ASSERT.
Ответ 4
В дополнение к предыдущим ответам...
ASSERT_
не завершает выполнение тестового примера. Он возвращает из любой функции, в которой он используется. Помимо отказа от тестового примера, он оценивается как return;
, а это означает, что он не может использоваться в функции, возвращающей что-то другое, кроме void
. Если вы не в порядке с предупреждением компилятора, то есть.
EXPECT_
выходит из строя, но не return;
, поэтому он может использоваться внутри функций любого типа возврата.