Разберём устройство тестовых фреймворков. Спрограммируем свой тестовый фреймворк на примере 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
Разобрался, проблема была в отступах
Дмитрий, спасибо большое за такой ценный материал! Пожалуйста, продолжайте радовать нас и дальше. После ваших уроков, по теме вообще не остается никаких вопросов, не знаю как вы это делаете, но настолько щепетильно объяснять какую-то тему может далеко не каждый, я бы даже сказал, что только вы :)
Или войти через: