Создаем свой Фреймворк на компонентах symfony2. Часть 8

Внимательные читатели, указывали на некоторые не очевидные, но тем не менее, важные баги в нашем фреймворке. Когда мы создаем фреймворк, мы должны быть уверены, что он ведет себя так, как рекламируется. В противном случае, все приложения созданные на его основе, будут содержать одни и те же ошибки.

Сегодняшняя задача — написать юнит-тесты для нашего фреймворка, с помощью PHPUnit.

Создадим файл конфигурации для PHPUnit phpunit.xml.dist:

Этот файл содержит настройки PHPUnit подходящие для большинства проектов. Интересно, что для загрузки тестов, будет использоваться наш автолоадер, а сами тесты будут храниться в директории tests.

Давайте напишем тест для случая “not found”. Что бы избежать создания всех зависимостей и действительно оттестировать то, что нужно, мы будем использовать заглушки. Их легче создавать, когда мы программируем на уровне интерфейсов, а не конкретных классов. К счастью, Symfony2 предоставляет такие интерфейсы к объектам ядра URL matcher и controller resolver. Воспользуемся этим:

Теперь можно писать первый тест:

Этот тест эмулирует запрос не соответствующий никакому маршруту. Метод match() выбрасывает ResourceNotFoundException, что позволяет нам протестировать ситуацию, когда наш фреймворк конвертирует это исключение в 404.

Для запуска теста, просто выполните phpunit из корневой директории фреймворка.

Я не буду в деталях разбирать код теста, но если вы не понимаете, что, черт возьми, тут происходит, настоятельно рекомендую вам почитать раздел про заглушки в PHPunit.

После запуска теста, вы увидите зеленную полосу, если, конечно, тесты прошли успешно, иначе полоса будет красной.

Добавить тест для любого исключения в контроллере — проще простого:

Ну и наконец, давайте добавим тест для случая когда у нас действительно правильный ответ:

В этом тесте мы эмулируем верный маршрут, возвращающий нужный контроллер. Мы проверяем, что статус ответа — 200 и это тот самый контент, который мы ожидаем.

Что бы проверить, что мы покрыли все возможные кейсы, запустим PHPUnit test coverage (XDebug должен быть включен).

Откройте example.com/cov/src_Simplex_Framework.php.html в браузере, и убедитесь что все строки кода в классе Framework зеленые (это значит, что они были выполнены в процессе запуска тестов).

Благодаря простому объектно-ориентированному коду, мы смогли написать юнит-тесты, покрывающие все возможные кейсы нашего фреймворка, а благодаря заглушкам, мы можем тестировать код фреймворка, а не компоненты Symfony2.

Теперь, когда мы уверены в нашем коде, мы можем спокойно сосредоточится на добавлении новой порции функционала в фреймворк.

К содержанию >>
Оригинал статьи на английском языке >>
Исходный код из статьи >>

Не забудьте поделиться статьей с друзьями

Подписывайтесь на меня в соц. сетях

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *