Разберём устройство тестовых фреймворков. Спрограммируем свой тестовый фреймворк на примере 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 Что будет дальше
Скрытый контент (код, слайды, ...) для подписчиков.
Открыть →Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram
Может уже аукцион доделать, а не хвататься за всё подрят?
Мне кажется наоборот хорошо что полно разных курсов, делая одно и тоже выгореть и потерять интерес можно)
Потерять интерес можно и не только от того что одно и то же, а от того что проект (курс) никак не завершится, потому что слишком много взяли на себя) Лично у меня есть таких два проекта, которые долго разрабатывались и никак не были завершены. Так как нет фокуса. Хотелось всего.
Так а на чём выгорать то? "Аукцион" застопорился очень давно...
Добрый вечер, Дмитрий.
Спасибо за новое видео, но всё-таки, когда Вы продолжите разработку "аукциона"?
Сколько всего будет эпизодов?
Спасибо.
Здравствуйте, Дмитрий. Хотелось бы видеть от вас более частого выпуска эпизодов. Вы один из лучших гуру (специалистов) по web-разработке в русегменте, который умеет очень хорошо и детально разъяснять материал и у которого можно подчеркнуть интересные практики и идеи. Не хотелось бы терять такого талантливого человека в глобальной сети.
Спасибо!
Хотелось бы фокуса на аукционе, все ждут его! А именно работу с очередями, работу с веб-сокетами!
Соглашусь с вами
При выполнение команды make пишет: make: *** Нет правила для сборки цели"docker-compose", требуемой для "app-up" Как эту ошибку можно исправить?
Команды в файле прописал, запускаю из под ubuntu
Разобрался, проблема была в отступах
Дмитрий, спасибо большое за такой ценный материал! Пожалуйста, продолжайте радовать нас и дальше. После ваших уроков, по теме вообще не остается никаких вопросов, не знаю как вы это делаете, но настолько щепетильно объяснять какую-то тему может далеко не каждый, я бы даже сказал, что только вы :)
Или войти через: