Задонатить и смотреть →
Открой безлимитный доступ к 100+ полезных скринкастов и получай скидки на все предстоящие мероприятия

Как работает 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
Комментарии (13)
Васёк

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

Ответить
Санжар

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

Ответить
Максим (@myks92)

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

Ответить
slo_nik

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

Ответить
slo_nik

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

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

Ответить
rodigy

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

Ответить
Arunas

Спасибо.

Ответить
Руслан

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

Ответить
Руслан

Спасибо!

Ответить
Александр

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

Ответить
Артём

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

Ответить
Александр

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

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

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

Ответить
Артём

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

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

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

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