Тестирование при помощи Google Test Framework

Вместо введения

Цель:

  1. Познакомиться с Google Test и Google Mock Framework;
  2. Изучить базовые понятия относящийся к тестированию кода;
  3. Научиться тестировать классы в среде разработки Qt Creator.

Инструменты

Для выполнения лабораторной работы вам понадобится:

  • IDE Qt Creator;
  • Google Test и Google Mock Framework;
  • Костюм железного человека Mark 2;
  • Класс для тестирования.

Перед началом работы рекомендуется ознакомиться со списком источников (в конце). Не обязательно смотреть/читать всё полностью, можно просто просмотреть, т.к. там есть примеры, которыми можно будет воспользоваться в процессе выполнения работы.

Подготовка «боевого» проекта

В нашем случае полноценного «боевого» проекта не будет, но для имитации реального рабочего процесса будем считать, что он у нас есть.

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

Создание тестового проекта в Qt Creator

Обычно тесты помещают в отдельном проекте — также поступим и мы. Но прежде, чем что-либо создавать, нужно скачать свежую версию тестового фреймворка.

Клонируйте или скачайте архивом Google Test и Google Mock Framework из официального репозитория. Где будет располагаться папка значения не имеет, но убедитесь, что в пути нет русских символов. Т.к. папка весит не больше 5МБ, то можно не проводить чистку репозитория, а оставить всё как есть.

Запустите Qt Creator. В меню Файл выберите Создать файлы или проекты (Ctrl+N). В открывшемся окне в списке Проекты выберите Другой проект, а в списке шаблонов Проект автотестирования.

Укажите путь и имя проекта (обычно начинается со слова Test) и нажмите Далее. В списке Среда тестирования выберите Тест Google. Название набора тестов и имя теста можно установить любое, т.к. их легко поменять в процессе. Довольно часто набор тестов называют по имени класса (Calculator), а конкретные тесты в соответствии с тестируемым функционалом (TestDivisionByZero). Установите галочку Разрешить С++11.

Тестирование при помощи Google Test Framework
Рис. 1 Проект автотестирования

Нажмите на кнопку Обзор и выберите корневую папку Google Test (googletest-master). Нажимайте Далее пока проект не будет создан.

Проверяем работоспособность пустого тестового проекта

Стандартный шаблон создаёт проект уже готовый к запуску. В этом проекте уже есть один тест, поэтому сразу запустим и посмотрим на результат.

Qt Creator позволяет увидеть результаты тестирования двумя способами.

Начнём с классического. Запустите проект при помощи зелёного треугольника (Ctrl+R), как и любой другой. Перед вами откроется обычное консольное окно, с подробно расписанным процессом тестирования. Текста довольно много и сложновато сразу оценить результат.

Тестирование при помощи Google Test Framework
Рис. 2 Вывод в консоль

Второй способ более наглядный, им и рекомендуется воспользоваться. Внизу окна найдите вкладку Результаты тестирования и откройте её (Alt+8). Вверху вкладки вы увидите несколько кнопок, нас интересует зелёный треугольник, он запустит все тесты на выполнение. Результат вы увидите в этом же окне.

Тестирование при помощи Google Test Framework
Рис. 3 Вывод в Результаты тестирования

В процессе работы вы можете получить предупреждения вида:

Можете просто не обращать на них внимания, на тестирование они никак не повлияет. Но если вы всё же хотите от них избавиться, то перейдите на вкладку Проекты (на левой панели) и на странице Настройки сборки в категории Среда сборки (в самом низу) добавьте переменную среды GOOGLETEST_DIR. В поле Значение вставьте путь к корневой папке Google Test.

Настройка тестового проекта

Подготовим тестовый проект к работе.

Откройте .pro файл тестового проекта и добавьте строку:

здесь путь_к_проекту — это абсолютный или относительный путь к корневой папке «боевого» проекта. Данная строка подскажет компилятору где искать заголовочные файлы, которые мы будем тестировать.

В дереве проекта щёлкните ПКМ по названию тестового проекта (не по .pro файлу) и выберите пункт Добавить существующие файлы… В открывшемся окне перейдите в папку с «боевым» проектом и выберите файлы: lockcontroller.h и lockcontroller.cpp (это тестируемый класс), IKeypad.h и ILatch.h (зависимости). В дереве проекта отобразятся подключенные файлы.

Таким образом, если бы мы продолжали вести работу над «боевым» проектом, можно было бы легко прогонять тесты без необходимости копирования файлов из одного проекта в другой.

Т.к. классы IKeypad и ILatch представлены только в виде интерфейсов, в тестовый проект нужно будет добавить два mock класса, которые будут предоставлять «поддельную» реализацию указанных интерфейсов.

Файл main.cpp трогать не нужно вообще, всё, что нужно там уже прописано. Найдите и откройте файл название которого начинается на tst_. Здесь вы как раз и будете писать тесты. В шаблоне, по умолчанию, подключается только gmock-matchers.h, исправьте на gmock.h, чтобы получить достук ко всем возможностям фреймворка. Здесь уже присутствует один тест, удалите его.

О том как замокать классы и как писать тесты вы можете узнать из официальной документации и видео из раздела Источники. Для выполнения работы вполне достаточно самых базовых знаний.

Тест кейсы которые нужно реализовать

Внимание: один из тестов должен получится красным, т.к. в классе LockController намеренно допущена ошибка. Исправлять ничего не нужно. Вносить изменения, в файлы предоставленные для тестирования, запрещено.

Что должно быть в отчёте

  • Итоговый тестовый проект добавьте в репозиторий;
  • В отчёт вставьте ссылку на этот проект;
  • Скриншоты проведённого тестирования. Все пункты должны быть развёрнуты. Если необходимо вставьте несколько скриншотов. Если вы предпочитаете вывод в консоль, можно вставить скриншоты консоли, но все тесты должны быть видны;
  • Изучите метод с ошибкой и добавьте в отчёт правильную реализацию метода (всего метода, не только тело);
  • Как вы считаете, каким образом могла возникнуть эта ошибка. Ответ добавить в отчёт.

Источники

  1. Открытый вебинар «Практика использования Google Test Framework» [видео с таймингом]
  2. Googletest Primer
  3. gMock for Dummies
  4. Остальная документация из репозитория
  5. TDD для начинающих [видео]
  6. Кент Бек — Экстремальное программирование. Разработка через тестирование (Часть II не обязательно)

Scroll Up