PHP дайджест #2. Тестирование

Всем привет!

Если вы из тех, кто пишет код, который сразу правильно работает, — думаю, можете дальше не читать:)

Как писал Стив Макконел,  «Тестирование требует, чтобы вы рассчитывали найти ошибки в своем коде. В противном случае вы, вероятно, на самом деле их не найдете». Но так как PHP — не строго типизированный язык, наплодить багов гораздо легче, чем, к примеру, в Java.

— Если вы хотите знать подходы к тестированию, когда нужно писать тесты, или как оптимизировать процесс тестирования, я очень советую прочитать главу № 22 «Тестирование, выполняемое разработчиками» из книги «Совершенный код» Стива Макконнелла.

— PHPUnit — самый популярный и часто используемый фреймворк для юнит-тестирования, он относится к семейству xUnit тестовых библиотек. Позволяет протестировать почти всё, что пожелаете. Хотите Database Testing? Не вопрос,  DBUnit к вашим услугам. На данный момент поддерживает MySQL, PostgreSQL, Oracle and SQLite. Есть возможность параллельного тестирования с ParaTest и т.п.

— Atoum — на мой взгляд, очень интересный тестовый фреймворк, позволяет писать более читабельный код, нежели PHPUnit. Фреймворк предоставляет простой, и в то же время очень сильный mock engine, также встроена поддержка BDD-like синтаксиса написания тестов.

— Simpletest — аналог PHPUnit. Позволяет создавать моки, также позволяет симулировать переход по ссылкам и отправку форм. Но фреймворк давно не обновлялся.

Есть несколько интересных фреймворков для написания тестов в стиле BDD. Можно выделить 2 вида BDD: SpecBDD и StoryBDD. В PHP реализованы тестовые фреймворки для каждого типа.

— Behat — позволяет описывать фичи удобным способом, а именно с помощью человеко-читаемых сценариев, это и есть StoryBDD. Данный вид описания сценариев мне нравится, он понятен и интересен, пример использования можно посмотреть в проекте Sylius — это Symfony2 Ecommerce фреймворк. В PHPStorm есть поддержка Behat.

— Mink — используется для написания приемочных тестов, можно использовать в паре с Behat. Не буду вдаваться в подробности, так как сам нечасто пишу приемочные тесты, посмотреть пример использования можно тут.

— PhpSpec —используется для юнит-тестов, описания тестов в виде спецификаций. Отправной точкой в понимании работы будет официальная документация, также можно почитать туториал и посмотреть видео php-spec-is-so-good. Видео с laracasts поможет понять, когда использовать phpspec.

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

— Behat и Codeception в сравнении — автор объясняет, почему, на его взгляд, функциональные тесты лучше писать с Behat, а Codeception использовать для приемочных тестов (вместо Behat + Mink).

— Mockery — отличный фреймворк для работы с моками, его можно интегрировать вместе с PHPUnit либо PHPSpec.

— HTTPMock — название говорит само за себя, библиотека для моков http запросов в юнит-тестах.

— vfsStream —эта обертка для потоков файловой системы позволяет создавать моки файловой системы. Тестировать можно и без нее, но она дает несколько преимуществ, описанных здесь.

— TDD example — если написание тестов перед написанием кода для вас не знакомо — автор на своих примерах показывает, как это может быть полезно.

На самом деле на PHP написано много разных библиотек для тестирования. Если вам интересно, можно посмотреть тут.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn



9 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Хороша підбір технологій. Дякую.

я бы добавил бы еще вот такой проект php-vcr.github.io попытка реализовать ruby VCR

Ещё очень крутая библиотека, которой долго не хватало в РНР это FactoryMuffin. Сравнительно недавно я про неё статеечку писал: codeception.com/...​a-with-factorymuffin.html

Отличный дайджест. Но я бы еще добавил бы к нему phactory.org

Ой, я только заметил, вы тоже про генерацию тестовых данных написали )
FactoryMuffin чуть новее и работает с ORM слоем и потому имхо чуть удобнее. Как минимум, стоит обратить внимание )

Действительно, выглядит удобнее, спасибо!

Thank you! The first DOU article that I added to the Favorites.

Підписатись на коментарі