Я веб-разработчик, работающий на PHP. У меня ограниченный опыт использования Test Driven Development в настольных приложениях C #. В этом случае мы использовали nUnit для модульной системы тестирования.
Я хотел бы начать использовать TDD в новых проектах, но я действительно не уверен, с чего начать.
Какие рекомендации у вас есть для фреймворка на основе PHP и какие хорошие ресурсы для тех, кто довольно новичок в концепции TDD?
Я использовал PHPUnit и SimpleTest, и я нашел SimpleTest более простым в использовании.
Что касается TDD, я не имел большой удачи в этом в чистом смысле. Я думаю, что это главным образом вопрос времени / дисциплины с моей стороны.
Добавление тестов после того, как факт был несколько полезен, но мои любимые вещи – это использовать тесты SimpleTest, которые проверяют конкретные ошибки, которые я должен исправить. Это упрощает проверку того, что вещи фактически фиксированы и остаются фиксированными.
Я настоятельно рекомендую разработку тестов Кент Бек (ISBN-10: 0321146530) . Он не был написан специально для PHP, но концепции существуют и должны быть легко переводимыми на PHP.
PHPUnit является стандартом, но иногда он также подавляющим, поэтому, если вы считаете его слишком сложным, проверьте phpt, чтобы начать работу. В этом очень легко писать тесты. Не проблема для любого программиста.
И чтобы ответить на ваш вопрос TDD – я не уверен, что TDD используется в пространстве PHP. Я вижу, что быстрое развитие приложений и TDD несколько противоречат (строго IMHO). TDD требует, чтобы у вас была полная картина того, что вы строите, и вы пишете свои тесты спереди, а затем реализуете код для прохождения теста.
Так, например, то, что мы делаем, – это написать много тестов, когда мы закончим. Это не всегда лучший подход, потому что иногда вы получаете фиктивные тесты, которые проходят, но не очень полезны, но по крайней мере это то, что вы можете расширить. Внутри мы продолжаем тесты и в основном пишем тест для каждой найденной ошибки. Так он становится более твердым.
Я лично предпочитаю SimpleTest. Существует тестовый бегун командной строки и веб-тестировщик, и есть даже плагин Eclipse, позволяющий запускать модульные тесты из самой IDE. Я обнаружил, что соединение Zend с PHPUnit намного сложнее работать, особенно с отладчиком.
То, как мы используем SimpleTest внутри, – это сценарий непрерывной интеграции, который мы написали сами. Каждый раз, когда мы проверяем функцию SVN, мы включаем модульные тесты. Каждый час или около того сценарий CI запускается и вызывает сценарий PHP командной строки, который выполняет все наши модульные тесты. Если какой-либо перерыв, я получаю электронное письмо. Это был отличный способ уменьшить количество ошибок в наших системах.
Тем не менее, вы можете так же легко использовать что-то вроде Phing для автоматического запуска тестов, либо на задании cron, либо с помощью крючка регистрации SVN.
На самом деле, если вы хотите связаться со мной напрямую для получения дополнительной помощи, вы можете связаться со мной через мою информацию о профиле SO. Я бы хотел помочь вам.
SimpleTest – отличная система. Я начал с него около 5 месяцев назад, никогда не слышал о TDD, и SimpleTest легко учиться, но все же мощный. Что касается ресурсов, я сейчас читаю TDD по примеру Кент Бек, и это хорошо.
Вы должны заглянуть в PHPUnit , он очень похож на nUnit.
Еще один современный инструмент, который вы должны посмотреть, это Codeception . Это намного проще, чем PHPUnit, и включает сценарийный подход, что весьма полезно для создания документации из тестов.