Как работает PHPUnit

Разберём устройство тестовых фреймворков. Спрограммируем свой тестовый фреймворк на примере PHPUnit. В нём как в реальном сделаем сканирование тестовых файлов, тестирование ожидаемых выбрасываемых исключений и написание параметризованных тестов с провайдерами данных с атрибутом DataProvider.

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

  • 00:00:04 Постановка задачи
  • 00:01:34 Запуск приложения в Docker
  • 00:05:40 Добавление бизнес-логики
  • 00:08:00 Функция нормализации адресов
  • 00:09:07 Неудобство проверок через echo или var_dump
  • 00:11:07 Тестовый скрипт
  • 00:11:52 Вынос функции в файл
  • 00:12:59 Первый тест
  • 00:13:24 Переопределение кода возврата
  • 00:15:55 Накопление результата вместо выхода
  • 00:17:50 Вывод различий
  • 00:19:04 Процедура assertEquals
  • 00:22:01 Избавление от побочных эффектов
  • 00:26:45 Автозагрузка через Composer
  • 00:29:44 Запуск тестов через Composer
  • 00:32:02 Вынос в тестовую процедуру
  • 00:33:28 Дробление тестовых случаев
  • 00:33:59 Автоматический запуск в цикле
  • 00:35:55 Добавление имён в отчёт
  • 00:37:27 Отлов произвольных исключений
  • 00:38:45 Игнорирование нереализованных тестов
  • 00:44:01 Переход на статическое методы
  • 00:46:14 Сканирование методов класса
  • 00:49:39 Сканирование файлов в папке tests
  • 00:54:38 Проверка выкидываемых исключений
  • 01:00:34 Ожидание expectException
  • 01:07:03 Изоляция запуска тестов
  • 01:08:54 Базовый класс TestCase
  • 01:10:54 Инкапсуляция запуска в run
  • 01:14:05 Инкапсуляции генерации имени
  • 01:15:19 Перенос проверок в Assert
  • 01:19:00 Перенос инфраструктуры в TestSuite
  • 01:21:55 Вывод статистики TestResult
  • 01:25:08 Принтер SummaryPrinter
  • 01:25:57 Вынос текста ошибок
  • 01:31:51 Вывод прогресса в реальном времени
  • 01:35:15 Использование событий с EventEmitter
  • 01:44:25 Перенос обрамления
  • 01:46:24 Накопление результатов в слушателе
  • 01:49:42 Инкапсуляция статусов в объект теста
  • 01:51:52 Провайдер данных DataProvider
  • 02:08:21 Реализация бизнес-логики
  • 02:09:34 Обзор результата
  • 02:18:59 Внутреннее устройство PHPUnit
  • 02:27:52 Что будет дальше
Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (15)
Васёк
2023-12-14 13:17

Может уже аукцион доделать, а не хвататься за всё подрят?

Ответить
Санжар
2023-12-14 15:05

Мне кажется наоборот хорошо что полно разных курсов, делая одно и тоже выгореть и потерять интерес можно)

Ответить
Максим (@myks92)
2023-12-14 17:16

Потерять интерес можно и не только от того что одно и то же, а от того что проект (курс) никак не завершится, потому что слишком много взяли на себя) Лично у меня есть таких два проекта, которые долго разрабатывались и никак не были завершены. Так как нет фокуса. Хотелось всего.

Ответить
slo_nik
2023-12-14 18:53

Так а на чём выгорать то? "Аукцион" застопорился очень давно...

Ответить
slo_nik
2023-12-14 18:54

Добрый вечер, Дмитрий.

Спасибо за новое видео, но всё-таки, когда Вы продолжите разработку "аукциона"?

Ответить
rodigy
2023-12-14 19:57

Сколько всего будет эпизодов?

Ответить
Arunas
2023-12-17 15:11

Спасибо.

Ответить
Руслан
2023-12-20 09:43

Здравствуйте, Дмитрий. Хотелось бы видеть от вас более частого выпуска эпизодов. Вы один из лучших гуру (специалистов) по web-разработке в русегменте, который умеет очень хорошо и детально разъяснять материал и у которого можно подчеркнуть интересные практики и идеи. Не хотелось бы терять такого талантливого человека в глобальной сети.

Ответить
Руслан
2023-12-27 18:37

Спасибо!

Ответить
Александр
2024-01-16 19:20

Хотелось бы фокуса на аукционе, все ждут его! А именно работу с очередями, работу с веб-сокетами!

Ответить
Артём
2024-02-07 04:07

Соглашусь с вами

Ответить
Александр
2024-02-04 14:06

При выполнение команды make пишет: make: *** Нет правила для сборки цели"docker-compose", требуемой для "app-up" Как эту ошибку можно исправить?

Команды в файле прописал, запускаю из под ubuntu

 Разобрался, проблема была в отступах

Ответить
Артём
2024-02-07 04:06

Дмитрий, спасибо большое за такой ценный материал! Пожалуйста, продолжайте радовать нас и дальше. После ваших уроков, по теме вообще не остается никаких вопросов, не знаю как вы это делаете, но настолько щепетильно объяснять какую-то тему может далеко не каждый, я бы даже сказал, что только вы :)

Ответить
Андрей
2025-06-05 03:52

Дмитрий, спасибо за Вашу работу. Это очень важная серия. Такой информации ни где нет - везде только про использование. Недавно начал знакомиться с тестированием. Пишу на другом языке, но раньше изучал php, поэтому сначала изучаю примеры на php, и потом переписываю на другом языке. Сейчас написал модуль для тестирования из Вашего кода. Искренне Вас благодарю. Спасибо за Вашу работу.

Ответить
Андрей
2025-06-09 07:51

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

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Yandex
MailRu
GitHub
Google
  • 1Как работает PHPUnit Free
  • 2Построители стабов и моков Скоро
  • 3Блокирующий и неблокирующий код Скоро