Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_pomoi_vse.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

8. Google Test. Утверждения Google Test.

Google Test — это фреймворк от Google для юнит-тестирования кода на С++.

Утверждения в Google Test являются макросами, схожими с вызовами функций. Вы тестируете класс или функцию, делая логические постулаты (утверждения) об их ожидаемом поведении. Когда такой постулат нарушается, Google Test печатает имя файла и номер строки, где произошел сбой. Также выводится диагностическое сообщение об ошибке. Вы можете задавать свои собственные дополнительные сообщения, которые будут добавлены к стандартному.

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

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

Чтобы вывести свое собственное сообщение об ошибке, просто используйте макрос утверждения как стандартный поток и оператор<<. Например:

ASSERT_EQ(x.size(), y.size()) << "Длина вектора x не равна длине вектора y"; for (int i = 0; i < x.size(); ++i) {   EXPECT_EQ(x[i], y[i]) << "Вектора x и y отличаются по индексу " << i; }

Все, что может быть выведено в поток ostream можно послать подобным же образом в макрос утверждения. В частности, строки языка С и объекты string. Если печатается широкая строка (wchar_t*, TCHAR* в режиме UNICODE в Windows, или std::wstring), то она будет преобразована в кодировку UTF-8.

9. Google Test. Фатальные утверждения.

Google Test — это фреймворк от Google для юнит-тестирования кода на С++. Общей архитектурой он слегка напоминает общепринятые boost::test и CppUnit, хотя слегка отличается в деталях (как по мне — в лучшую сторону)

Утверждения бывают фатальные и не фатальные. Фатальные макросы вида ASSERT_xxx приводят к остановке процесса тестирования, а нефатальные (или мягкие) утверждения вида EXPECT_xxx позволяют довести тесты до конца, просто выводя информацию об ошибке.

10. Google Test. Нефатальные утверждения.

Google Test — это фреймворк от Google для юнит-тестирования кода на С++. Общей архитектурой он слегка напоминает общепринятые boost::test и CppUnit, хотя слегка отличается в деталях (как по мне — в лучшую сторону)

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]