Что такое PHPUnit
PHPUnit – это фреймворк модульного тестирования на языке программирования PHP. Построен на архитектуре xUnit, а именно SUnit которая стала популярна в JUnit. PHPUnit был создан Себастьяном Бергманном, и его разработка размещена на GitHub.
Идея:
PHPUnit основан на идее, что разработчики должны быстро находить ошибки в своем, только что написаном, коде и утверждать, что регрессия кода не произошла в других частях базы кода. PHPUnit использует утверждения для проверки того, что поведение конкретного компонента – или «единицы» – тестируется, как следует.
Зачем нужен PHPUnit:
Цель модульного тестирования состоит в том, чтобы изолировать каждую часть программы и показать, что отдельные части работают как ожидаеться. Модульный тест предоставляет строгий письменный контракт, который должен удовлетворять часть кода. В результате модульные тесты обнаруживают проблемы в начале цикла разработки.
PHPUnit может выводить результаты тестирования в нескольких разных форматах, включая JUnit XML и TestDox.
Модульное тестирование (англ. unit testing) — процесс в программировании,
позволяющий проверить на корректность единицы исходного кода, наборы из одного
или более программных модулей вместе с соответствующими управляющими данными, процедурами использования и обработки.
Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.
Содержание:
- 1. Установка PHPUnit
- Требования
- PHP Archive (PHAR)
- Windows
- Проверка релизов PHPUnit PHAR
- Composer
- Необязательные пакеты
- 2. Написание тестов на PHPUnit
- Зависимости тестов
- Провайдеры данных
- Тестирование исключений
- Тестирование ошибок PHP
- Тестирования вывода
- Вывод ошибки
- Крайние случаи
- 3. Исполнитель тестов командной строки
- Опции командной строки
- TestDox
- 4. Фикстуры
- Больше setUp() чем tearDown()
- Разновидности
- Совместное использование фикстур
- Глобальное состояние
- 5. Организация тестов
- Составление набора тестов с помощью файловой системы
- Составление набора тестов с помощью конфигурации XML
- 6. Рискованные тесты
- Бесполезные тесты
- Непреднамеренно покрытый код
- Вывод во время выполнения теста
- Тайм-аут выполнения теста
- Манипуляция глобальным состоянием
- 7. Неполные и пропущенные тесты
- Неполные тесты
- Пропущенные тесты
- Пропуск тестов с помощью @requires
- 8. Тестирование базы данных
- Поддерживаемые поставщики для тестирования баз данных
- Трудности при тестировании баз данных
- Четыре этапа теста базы данных
- 1. Очистка базы данных
- 2. Настройка фикстуры
- 3–5. Запуск теста, проверка результата и очистка
- Конфигурация PHPUnit Database TestCase
- Реализация getConnection()
- Реализация getDataSet()
- Как насчёт схемы базы данных (Database Schema, DDL)?
- Совет: Используйте собственную абстрактную реализацию PHPUnit Database TestCase
- Понимание DataSets и DataTables
- Доступные реализации
- Остерегайтесь внешних ключей
- Реализация собственного DataSets/DataTables
- Использование API подключения к базе данных
- API утверждений базы данных
- Утверждение количество строк таблицы
- Утверждение состояния таблицы
- Утверждение результата запроса
- Утверждение состояния нескольких таблиц
- Часто задаваемые вопросы
- Будет ли PHPUnit (повторно) создавать схему базу данных для каждого теста?
- Необходимо ли мне обязательно использовать PDO в моём приложении для расширения базы данных?
- Что мне делать, когда я получаю ошибку «Too much Connections»?
- Как обрабатывать NULL в наборах данных Flat XML / CSV?
- 9. Тестовые двойники
- Заглушки
- Подставные объекты
- Prophecy
- Имитация трейтов и абстрактных классов
- Создание заглушек и имитация веб-сервисов
- Имитация файловой системы
- 10. Анализ покрытия кода
- Показатели программного обеспечения покрытия кода
- Белый список файлов
- Игнорирование блоков кода
- Определение покрытых методов
- Крайние случаи
- 11. Логирование
- Результаты теста (XML)
- Покрытие кода (XML)
- Покрытие кода (TEXT)
- 12. Расширение PHPUnit
- Подкласс PHPUnit\Framework\TestCase
- Написание пользовательских утверждений
- Реализация PHPUnit\Framework\TestListener
- Реализация PHPUnit\Framework\Test
- Расширение TestRunner
- Интерфейсы доступных событий
- Приожение