Как создать юнит-тест QtTest в среде разработки QtCreator

В рамках статьи рассмотрим как создавать юнит-тесты с помощью библиотеки QtTest в QtCreator

2 мин на чтение

Среда разработки QtCreator включает в себя инструменты для работы с юнит-тестами проекта. В рамках статьи рассмотрим как создавать юнит-тесты с помощью библиотеки QtTest в QtCreator.

Создание основного приложения

Начнем с создания нового проекта (CTRL+N) как проекта с поддиректориями (Subdirs Project). Этот проект по умолчанию не содержит ничего кроме файла проекта.

Диалог создания нового проекта в Qt Creator с выбором шаблона Subdirs Project

Поэтому следующим шагом среда запрашивает создание первого подпроекта. Выбираем простое приложение на языке C++.

Диалог создания подпроекта в Qt Creator с выбором шаблона Plain C++ Application

Мастер автоматически создаст шаблонное приложение.

Шаблонный код main.cpp, созданный мастером Qt Creator для нового C++ приложения

Добавим в проект импровизированный класс калькулятора Calculator, который умеет складывать (sum()), вычитать (dif()), умножать (mul()) и делить (div()) указанные значения.

Код main.cpp с использованием класса Calculator для сложения, вычитания, умножения и деления

Основное приложение-калькулятор готово. Теперь покроем юнит-тестами разработанный класс.

Создание подпроекта с юнит-тестом

Через контекстное меню корневого элемента проекта (untitled) вызываем мастер создания нового подпроекта (New Subproject…) и выбираем подпроект авто-теста (Auto Test Project). В мастере вводим название подпроекта test и название класса юнит-теста tst_Calculator.

Диалог создания подпроекта юнит-теста с выбором шаблона Auto Test Project в Qt Creator

В результате мастер создаст подпроект test с шаблонным модулем tst_tst_calculator.cpp. Модуль содержит следующие элементы:

  • класс теста tst_Calculator, который будет реализовывать основную функциональность;

  • точку входа main(), определенную макросом QTEST_APPLESS_MAIN(), который разворачивает всю необходимую рутину теста Qt;

  • включение moc-файла (#include "*.moc"), который содержит мета-функциональность QObject для класса tst_Calculator.

Шаблонный код юнит-теста tst_tst_calculator.cpp, созданный мастером Auto Test Project

Класс теста в QtTest состоит из тест-методов, определенных как закрытые слоты (private slots). По умолчанию мастер создал один тест-метод test_case1(). Помимо тест-методов в QtTest существуют специальные методы, которые вызываются автоматически в ключевых точках выполнения теста:

  • initTestCase() вызывается перед самым первым тест-методом;

  • cleanupTestCase() вызывается после самого последнего тест-метода;

  • init() вызывается перед каждым тест-методом;

  • cleanup() вызывается после каждого тест-метода.

Эти методы можно использовать для инициализации или очистки каких-либо сущностей. Но в нашем примере мы их опустим.

Создадим 4 тест-метода для проверки соответствующих методов класса Calculator: testSum(), testDif(), testMul() и testDiv(). Для проверки возвращаемых методами значений воспользуемся макросом QCOMPARE(a, b), который сравнивает текущее левое значение с эталонным правым и в случае несовпадения завершает тест с поясняющим сообщением.

Код тест-метода testSum() с проверками QCOMPARE для класса Calculator

Еще один полезный макрос - QVERIFY(condition), прекращающий выполнение теста, если входящее условие не истино (false).

Для корректной компиляции проекта необходимо прописать исходные файлы класса Calculator в проект test. Иначе получим ошибки компоновки (link).

Файл test.pro с добавленными в SOURCES и HEADERS исходниками класса Calculator

Для запуска тестов используем панель Tests в QtCreator, где отображаются все юнит-тесты, которые среда разработки распознала в нашем проекте.

Панель Tests в Qt Creator со списком распознанных юнит-тестов testSum, testDif, testMul, testDiv

Через контекстное меню можно запустить как все тесты разом, так и тесты отдельного класса, либо отдельный тест-метод. Есть возможность запуска под отладчиком.

Контекстное меню запуска теста testSum в панели Tests Qt Creator

Результат выполнения теста появится на соответствующей вкладке нижней панели (Test Results). В этот раз все юнит-тесты “зеленые”, то есть прошли успешно.

Вкладка Test Results с результатами успешного прохождения всех юнит-тестов

В случае обнаружения несовпадений, QtCreator выведет описание проблемы и укажет, в какой строке она произошла.

Вкладка Test Results с описанием ошибки FAIL в тест-методе testMul при несовпадении значений

Простейшие юнит-тесты на QtTest готовы. Полный код рассмотренного примера размещен на GitHub.


Обсудить в Телеграм


Свежие записи

Чему учиться в эпоху ИИ?

Чему учиться в эпоху ИИ?

Заметка по книге Букреева и ДеУолта “Эверест. Смертельное восхождение”

1 мин на чтение

Doc As Code: диаграммы PlantUML в Doxygen

Doc As Code: диаграммы PlantUML в Doxygen

Включаем поддержку UML-диаграмм в Doxygen и размышляем о последствиях

3 мин на чтение

Какие файлы нельзя коммитить в Git

Какие файлы нельзя коммитить в Git

Разбираемся, как не превратить репозиторий Git в Google-диск

3 мин на чтение

Зачем нужны UML диаграммы?

Зачем нужны UML диаграммы?

Выясняем, когда и для чего разработчики используют UML

3 мин на чтение

Как разбить проект CMake на подпроекты

Как разбить проект CMake на подпроекты

Разделяем на подпроекты существующий проект C++ на CMake

1 мин на чтение