Unit tests matter

Unit tests matter

Теоретические основы тестирования

Чтобы куда-то идти, необходимо понять, зачем это делать.

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

Про цели, виды и преимущества автоматизированного тестирования я писал в статье: Автоматизиция тестирования. Довольно скучный, но в тоже время важный этап.

Библиотеки для тестирования

Надо изучить набор библиотек для ускорения написания тестов. Зачем изобретать велосипед, если за вас все придумали?

PHPUnit

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

Mockery

В современных реалиях невозможно представить большой проект в PHP без использования объектно-ориентированной парадигмы. Объекты взаимодействуют между собой, а программисту необходимо как-то умело управлять данной большой оргией. В модульном тестировании же, нам необходимо выдернуть объект из его окружения и изолировать его от всех внешних и внутренних объектов. Для этого поможет библиотека Mockery, которая хорошо с данным справляется. Подробнее можно прочитать в статье Чудо Mockery для заглушек в unit тестах.

Тестирования WordPress: Brain Monkey или WP_Mock

Так же в процессе написания тестов, надо как-то избавиться от зависимостей ядра WordPress. Возможности, объекты, глобальные переменные и прочие радости WordPress необходимо заменить на заглушки. Для этого есть отличные библиотеки Brain Monkey и WP_Mock. Делают они примерно тоже самое, но имеют разный синтаксис, поэтому выбирайте ту, которая вам понравится больше. Про них можно легко прочитать в статьях: Модульное тестирование WordPress при помощи Brain Monkey и Модульное тестирование WordPress(PHPUnit, WP_Mock). Библиотеки простые, разобраться с ними хватит пару дней.

Function Mockery для тестирования возможностей PHP

Иногда приходиться сталкивать с тем, что необходимо как-то настроить поведение PHP-функций. И это основная задача Function Mockery. Примеры можно посмотреть в статье Подмена встроенных php-функций.

Проблемы с тестированием

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

Слишком большие юниты

Большие возможности/способы/классы несут в себе огромную логику приложения и тем сложнее с ними разобраться. Диагноз: нарушение самого важного принципа в разработке это keep it stupid simple или принципов SOLID. По началу придется много рефакторить, разбивать логику на более мелкие части, но это улучшить качество кода и простоту поддержки.

Hard Dependencies

Жесткие зависимости объектов друг от друга сильно влияют на функция приложения расширяться, а это самое важное для бизнеса и для «пресса» 🙂 Что такое зависимости и как с ними правильно работать можно прочитать в статье: Dependency Injection(Внедрение зависимостей) .

Контроль тестов

В завершении, работу важно проверять, проверять и ещё раз проверять. Для этого идеальный инструмент continuous integration, где вы используя любую систему контроля версий перед или после отправки данных в репозиторий проверите, что тесты выполнились успешно ещё раз.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *