Использование ASSERT и EXPECT в GoogleTest - PullRequest
38 голосов
/ 02 апреля 2010

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

Ответы [ 4 ]

43 голосов
/ 02 апреля 2010

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

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

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


Это отражено в учебнике :

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

19 голосов
/ 02 апреля 2010

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

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

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

  • продолжать бессмысленно, если утверждение не выполнено

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

5 голосов
/ 10 февраля 2017

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

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

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

3 голосов
/ 28 мая 2010

Проверьте следующую ссылку: Эффективное тестирование C ++ с использованием GoogleTest (слайд 23). Существует хорошее руководство / совет по использованию EXPECT против ASSERT.

...