Всем привет!
Если вы из тех, кто пишет код, который сразу правильно работает, — думаю, можете дальше не читать:)
Как писал Стив Макконел, «Тестирование требует, чтобы вы рассчитывали найти ошибки в своем коде. В противном случае вы, вероятно, на самом деле их не найдете». Но так как 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 написано много разных библиотек для тестирования. Если вам интересно, можно посмотреть тут.