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