- How to use Google Test for C++ in Visual Studio
- Add a Google Test project in Visual Studio 2019
- Add a Google Test project in Visual Studio 2017
- Configure the test project
- Set additional options
- Add include directives
- Write and run tests
- Google test framework windows
- Системы тестирования
- Ключевые понятия
- Утверждения
- Тесты и наборы тестов
- Фиксации и тестовое окружение
- Запуск тестов
- Использование Google Test для C++ в Visual Studio How to use Google Test for C++ in Visual Studio
- Добавление проекта Google Test в Visual Studio 2019 Add a Google Test project in Visual Studio 2019
- Создание проекта Google Test в Visual Studio 2017 Add a Google Test project in Visual Studio 2017
- Настройка тестового проекта Configure the test project
- Настройка дополнительных параметров Set additional options
- Добавление директив include Add include directives
- Написание и запуск тестов Write and run tests
How to use Google Test for C++ in Visual Studio
In Visual Studio 2017 and later, Google Test is integrated into the Visual Studio IDE as a default component of the Desktop Development with C++ workload. To verify that it is installed on your machine, open the Visual Studio Installer and find Google Test under the list of workload components:
Add a Google Test project in Visual Studio 2019
- In Solution Explorer, right-click on the solution node and choose Add >New Project.
- Set Language to C++ and type test in the search box. From the results list, choose Google Test Project.
- Give the test project a name and click OK.
Add a Google Test project in Visual Studio 2017
- In Solution Explorer, right-click on the solution node and choose Add >New Project.
- In the left pane, choose Visual C++ >Test and then choose Google Test Project in the center pane.
- Give the test project a name and click OK.
Configure the test project
In the Test Project Configuration dialog that appears, you can choose the project you want to test. When you choose a project, Visual Studio adds a reference to the selected project. If you choose no project, then you need to manually add references to the project(s) you want to test. When choosing between static and dynamic linking to the Google Test binaries, the considerations are the same as for any C++ program. For more information, see DLLs in Visual C++.
Set additional options
From the main menu, choose Tools > Options > Test Adapter for Google Test to set additional options. See the Google Test documentation for more information about these settings.
Add include directives
In your test .cpp file, add any needed #include directives to make your program’s types and functions visible to the test code. Typically, the program is up one level in the folder hierarchy. If you type #include «../» an IntelliSense window will appear and enable you to select the full path to the header file.
Write and run tests
You are now ready to write and run Google Tests. See the Google Test primer for information about the test macros. See Run unit tests with Test Explorer for information about discovering, running, and grouping your tests by using Test Explorer.
Google test framework windows
Если код не протестирован, то он не хорош 🙂
Системы тестирования
При регулярном написании тестов разработчик сталкивается с рядом специфических проблем:
- Код теста содержит в себе много достаточно однотипных проверок. Необходимо максимально упростить и сократить время написания этого проверочного кода.
- Каждый тестируемый модуль / класс как правило требует проверки различных аспектов своего поведения. Необходимо максимально упростить процессы написания, организации и управления фрагментами кода.
- Для проведения тестов часто требуется создание специального тестового окружения: файлы с входными данными, сконструированные и приведённые в требуемое состояние объекты других классов / модулей, и т. п. После прогона теста и анализа результатов, тестовое окружение необходимо очистить либо вернуть в начальное состояние для прогона следующего теста.
Системы тестирования с той или иной успешностью решают эти и другие связанные с написанием тестов проблемы, избавляя программиста от написания кучи однотипного кода.
В рамках данного курса студентам предлагается использовать систему тестирования Google Testing Framework (далее, для краткости, GoogleTests)
Ключевые понятия
Кратко перечислим базовые строительные элементы GoogleTests.
- Assert | Утверждение — это выражение-проверка, результатом выполнения которого могут быть:
- Success | Успех — проверка выполнена успешно.
- Nonfatal Failure | Отказ — проверка не выполнена, но данный отказ не является критическим, выдается диагностическое сообщение, и выполнение теста продолжается.
- Fatal Failure | Критический отказ — проверка не выполнена, выдается диагностическое сообщение, и выполнение теста прерывается.
- Test | Тест — фрагмент программы с набором утверждений (проверок), которые проверяют состояние программы на разных этапах выполнения.
- Test Case | Набор тестов — тесты, объединенные разработчиком в некоторую логическую группу, например, все тесты, связанные с каким либо модулем / классом.
- Fixture | Фиксация — объект, связанный с тестовым набором, и выполняющий инициализацию / деинициализацию тестового окружения, для независимого выполнения каждого теста из набора.
Пройдемся по ним более подробно и с примерами.
Утверждения
Утверждения реализованы в виде макросов (макро-функций).
Утверждения, начинающиеся с префикса ASSERT_ , порождают в случае неуспеха критические отказы. Утверждения, начинающиеся с префикса EXPECT_ — некритические.
В случае критического отказа происходит немедленный возврат из функции, в которой проверялось это утверждение. Если за этим утверждением идет какой-то очищающий память код или какие-то другие завершающие процедуры, то можно получить утечку памяти / ресурсов.
Далее приводится синтаксис для критических утверждений, для некритических синтаксис аналогичен, различается только префикс в имени макро-функции ( ASSERT_ / EXPECT_ ).
Простые логические проверки
- ASSERT_TRUE(выражение); — проверка выражения на истинность
- ASSERT_FALSE(выражение); — проверка выражения на ложность
Проверка значений
Значения сравниваются с помощью операторов сравнения.
- ASSERT_EQ(ожидаемое, реальное); — проверка, что реальное значение точно равно ожидаемой величине
- ASSERT_NE(ожидаемое, реальное); — проверка, что реальное значение не равно ожидаемой величине
- ASSERT_LT(ожидаемое, реальное); — проверка, что ожидаемое значение ASSERT_LE(ожидаемое, реальное); — проверка, что ожидаемое значение ASSERT_GT(ожидаемое, реальное); — проверка, что ожидаемое значение > реальная величина
- ASSERT_GE(ожидаемое, реальное); — проверка, что ожидаемое значение >= реальная величина
Есть особый случай, который в GoogleTest обрабатывается не очевидным образом — это проверка указателя на равенство / не равенство NULL . Обычное сравнение не вполне корректно работает, так как чаще всего указатель NULL определён как целое число 0 , и его тип не совпадает с типом указателя.
Разработчики предлагают следующие обходные варианты решения:
Сравнение строк
- ASSERT_STREQ(ожидаемая, реальная); — проверка C-строк на равенство
- ASSERT_STRNE(ожидаемая, реальная); — проверка C-строк на неравенство
- ASSERT_STRCASEEQ(ожидаемая, реальная); — регистронезависимая проверка C-строк на равенство
- ASSERT_STRCASENE(ожидаемая, реальная); — регистронезависимая проверка C-строк на неравенство
Сравнение чисел с плавающей запятой
- ASSERT_FLOAT_EQ(ожидаемое, реальное); — неточная проверка двух float значений на равенство
- ASSERT_DOUBLE_EQ(ожидаемое, реальное); — неточная проверка двух double значений на равенство
- ASSERT_NEAR(ожидаемое, реальное, абсолютная_ошибка); — неточная проверка двух значений с плавающей запятой на равенство с заданной величиной допустимой ошибки
Вызов отказа или успеха
- SUCCEED(); — немедленное успешное завершение теста
- FAIL(); — немедленное завершение теста с критическим отказом
- ADD_FAILURE(); — вызвать некритический отказ и продолжить выполнение теста
В случае отказа, выдаётся диагностическое сообщение с данными, использованными в утверждении. Кроме того, можно задать собственный комментарий:
Тесты и наборы тестов
Для объявления и реализации теста используется макро-функция TEST() . Этот макрос указывает набор, в который будет включён тест, и организует возвращающую void функцию, в которой можно использовать утверждения.
Макро-функция TEST() принимает 2 параметра, уникально идентифицирующие тест, — название тестового набора и название теста. В рамках одного и того же тестового набора названия тестов не должны совпадать. Разработчики GoogleTest настоятельно советуют не использовать в названиях тестовых наборов символы подчёркивания, и этому правилу стоит следовать. Если название начинается с префикса DISABLED_ , это означает, что тест (набор тестов) помечен как временно не используемый.
Как отмечалось ранее, критический отказ вызывает немедленный возврат из функции. Утверждения можно использовать не только в составе теста, но и вызывать из любой функции. Имеется лишь одно ограничение — утверждения, порождающие критические отказы не могут быть вызваны из функций возвращающих не void.
Фиксации и тестовое окружение
Фиксация представляет собой класс, унаследованный от ::testing::Test , внутри которого объявлены все необходимые для тестирования объекты при этом в функции SetUp() выполняется инициализация тестового окружения перед прогоном очередного теста, а в функции TearDown() — обратная деинициализация после прогона этого теста.
Тесты, в которых используются фиксации, должны быть объявлены с помощью макро-функции TEST_F() .
Эта макро-функция в использовании полностью аналогична TEST() , только в качестве первого параметра ей передаётся не название набора тестов, а название фиксации.
С помощью фиксаций, например, можно тестировать код на утечки памяти.
Запуск тестов
Объявив все необходимые тесты, мы можем запустить их с помощью функции RUN_ALL_TESTS() . Функцию можно вызывать только один раз. Желательно, чтобы тестовая программа возвращала результат работы функции RUN_ALL_TESTS() , так как некоторые автоматические средства тестирования определяют результат выполнения тестовой программы по тому, что она возвращает.
Использование Google Test для C++ в Visual Studio How to use Google Test for C++ in Visual Studio
В Visual Studio 2017 и более поздних версиях решение Google Test интегрировано в среду Visual Studio как компонент рабочей нагрузки Разработка классических приложений на C++ . In Visual Studio 2017 and later, Google Test is integrated into the Visual Studio IDE as a default component of the Desktop Development with C++ workload. Чтобы проверить, установлен ли этот компонент на компьютере, откройте Visual Studio Installer и найдите Google Test в списке компонентов рабочей нагрузки. To verify that it is installed on your machine, open the Visual Studio Installer and find Google Test under the list of workload components:
Добавление проекта Google Test в Visual Studio 2019 Add a Google Test project in Visual Studio 2019
- В обозревателе решений щелкните узел решения правой кнопкой мыши и выберите пункты Добавить >Новый проект. In Solution Explorer, right-click on the solution node and choose Add >New Project.
- Задайте Язык как C++ и введите тест в поле поиска. Set Language to C++ and type test in the search box. Выберите в списке результатов Проект Google Test. From the results list, choose Google Test Project.
- Укажите имя тестового проекта и нажмите кнопку ОК. Give the test project a name and click OK.
Создание проекта Google Test в Visual Studio 2017 Add a Google Test project in Visual Studio 2017
- В обозревателе решений щелкните узел решения правой кнопкой мыши и выберите пункты Добавить >Новый проект. In Solution Explorer, right-click on the solution node and choose Add >New Project.
- В левой области выберите Visual C++ >Тест, а в центральной области — Проект Google Test. In the left pane, choose Visual C++ >Test and then choose Google Test Project in the center pane.
- Укажите имя тестового проекта и нажмите кнопку ОК. Give the test project a name and click OK.
Настройка тестового проекта Configure the test project
В открывшемся диалоговом окне Конфигурация тестового проекта можно выбрать проект, который необходимо тестировать. In the Test Project Configuration dialog that appears, you can choose the project you want to test. При выборе проекта Visual Studio добавляет ссылку на него. When you choose a project, Visual Studio adds a reference to the selected project. Если проект не выбран, необходимо вручную добавить ссылки на проекты, которые следует тестировать. If you choose no project, then you need to manually add references to the project(s) you want to test. При выборе статического или динамического связывания с двоичными файлами Google Test следует учитывать те же факторы, что и в случае с любой другой программой C++. When choosing between static and dynamic linking to the Google Test binaries, the considerations are the same as for any C++ program. Дополнительные сведения см. в статье DLL в Visual C++. For more information, see DLLs in Visual C++.
Настройка дополнительных параметров Set additional options
Чтобы настроить дополнительные параметры, в главном меню выберите Сервис > Параметры > Адаптер тестов для Google Test. From the main menu, choose Tools > Options > Test Adapter for Google Test to set additional options. Дополнительные сведения об этих параметрах см. в документации по Google Test. See the Google Test documentation for more information about these settings.
Добавление директив include Add include directives
В CPP-файле теста добавьте необходимые директивы #include , чтобы типы и функции программы были доступны коду теста. In your test .cpp file, add any needed #include directives to make your program’s types and functions visible to the test code. Как правило, программа находится в иерархии папок на один уровень выше. Typically, the program is up one level in the folder hierarchy. Если ввести #include «../» , появится окно IntelliSense, в котором можно выбрать полный путь к файлу заголовка. If you type #include «../» an IntelliSense window will appear and enable you to select the full path to the header file.
Написание и запуск тестов Write and run tests
Все готово к написанию и выполнению тестов Google Test. You are now ready to write and run Google Tests. Сведения о макросах тестов см. в учебнике по началу работы с Google Test. See the Google Test primer for information about the test macros. Сведения об обнаружении, выполнении и группировании тестов с помощью обозревателя тестов см. в статье Выполнение модульных тестов с помощью обозревателя тестов. See Run unit tests with Test Explorer for information about discovering, running, and grouping your tests by using Test Explorer.