Найти тему

Использование юнит-тестирования в CakePHP для автоматизированного сравнения выходных данных метода

Оглавление

Тестирование является неотъемлемой частью разработки, которая помогает понять, соответствует ли программа заявленным требованиям или нет. В свою очередь, авто-тесты помогают в этой рутинной работе, автоматизируя процесс тестирования.


В этой статье мы рассмотрим, как использовать юнит-тестирование в CakePHP для автоматизированного сравнения выходных данных методов с помощью инструмента PHPUnit.


Что такое юнит-тестирование?


Юнит-тестирование — это тестирование отдельных модулей или компонентов программы, чтобы убедиться, что каждый из них работает правильно. В контексте CakePHP юнит-тестирование позволяет проверять работу отдельных методов моделей, контроллеров и других компонентов приложения.


PHPUnit


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

Для новичков настройка и начальное освоение PHPUnit могут показаться сложными, особенно при работе с большими проектами. Кроме того, PHPUnit может потребовать значительных усилий на написание и поддержание тестов, что не всегда оправдано в небольших проектах. Тем не менее, для большинства случаев использование PHPUnit существенно повышает качество и надежность
кода.


Установка и запуск PHPUnit


Для установки PHPUnit в ваш проект, выполните следующие шаги. Во-первых, убедитесь, что у вас установлен Composer — менеджер зависимостей для PHP. Если Composer еще не установлен, скачайте и установите его с официального сайта.
Если ваше приложение работает внутри Docker-контейнера, то используйте следующую команду, чтобы получить доступ к нему через bash:

Затем, в корневой директории вашего проекта выполните команду composer require --dev
phpunit/phpunit, чтобы добавить PHPUnit в качестве зависимости для разработки.

-2


После успешной установки вы сможете запускать PHPUnit с помощью команды
vendor/bin/phpunit в терминале.

-3


Для проверки правильности установки выполните vendor/bin/phpunit --version — вы должны увидеть текущую версию PHPUnit.


Создание юнит-теста


В CakePHP существует директория tests, там располагаются тесты по пути tests/TestCase/[Type],
где [Type] - это тип тестируемой сущности. Например:
● tests/TestCase/Model
● tests/TestCase/Controller
● tests/TestCase/View


Автоматическое создание тест-файла


В CakePHP существует удобный механизм автоматической генерации кода, называемый "bake" (запекание). При создании таких сущностей как модели, контроллеры или shell-команды с помощью утилиты bake, CakePHP автоматически создает соответствующие файлы и структуры, включая тестовые файлы. Например, при "запекании" shell-команды для проекта создается базовый тестовый файл для этой команды.


Структура тест-файла


● Метод для подготовки и инициализации всех необходимых данных

-4

● Метод для завершения каких-либо действий, выполняемых в течении теста

-5


● Тестируемый метод. Название метода должно начинаться с test и далее совпадать с изначальным названием, в данном случае это метод main. Тестируемых методов может быть множество.

-6

Кейс использования юнит-теста


Мы в компании используем систему Redmine для отслеживания трудозатрат. Каждый месяц менеджеры проектов составляют отчеты по трудозатратам на проектах, которые они ведут, и прогнозируют риски, задачи и количество часов на следующий месяц.


Мы решили попробовать упростить эти процессы и разработали отчет по проекту. Это shell-команда, которая запускается с аргументами: имя/id проекта, API-ключ от Redmine, дата, начиная с которой и по настоящее время будут выведены данные по проекту. При использовании этой команды мы получим небольшой отчет с разными характеристиками, например, соотношение потраченного времени к заявленной оценке, задачи без оценки, прогноз оставшихся часов до завершения всех задач, среднее количество потраченных часов в день на проекте и т.д.


Для тестирования корректности работы команды для генерации такого отчета можно использовать юнит-тесты. Отчет должен содержать значение "Average spent hours: 1.8" (это среднее количество потраченных на определенном проекте часов в день) его наличие мы и будем проверять с помощью юнит-теста.


Содержание тест файла

-7

Существует огромное количество методов таких как assertContains для сравнения различных результатов, посмотреть их можно в документации PHPUnit.
После запуска PHPUnit выполнится данный тест, и мы получим положительный или отрицательный результат выполнения.


Заключение


Юнит-тестирование в CakePHP позволяет автоматизировать процесс проверки работы методов, что значительно упрощает процесс разработки и поддержания кода. Следуя принципам TDD (test drive development - разработка через тестирование), вы можете убедиться, что ваш код работает так, как задумано, и предотвращать появление ошибок в будущем.
Автоматизация тестирования — это неотъемлемая часть профессиональной разработки. Она помогает экономить время и ресурсы, а также повышает надежность и качество программного обеспечения.

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

Информационные статьи о создании сайтов, мобильных приложений