В мире рубинов TDD облегчается с помощью инструментов, встроенных в структуру. Factory Girl, Mocha, rSpec и другие позволяют разработчикам легко и динамически создавать тесты, соответствующие нужным тестовым примерам.
Я также был разочарован отсутствием инструментов TDD в Drupal. Моя самая большая проблема с ними - количество времени, необходимое для выполнения одного теста. Циклы разработки не могут быть замедлены отдельными тестами, занимающими 60-90 секунд на каждую итерацию. Полные наборы тестов будут работать в течение нескольких часов, если вы вообще будете писать тесты.
Я подозреваю, что это связано с копированием полной базы данных при каждом запуске теста, но вряд ли это изменится в ближайшем будущем, что я могу сказать, особенно если вам нужно использовать DrupalWebTestCase для этого.
Я собираю решение, используя Phactory и phpunit, которые загружают Drupal вручную. Очевидно, столкнулся с некоторыми проблемами и еще не закончил это, но это добирается там.
К счастью, большая часть моей работы находится на уровне бэкэнда, поэтому я могу оставаться на уровне DRUPAL_BOOTSTRAP_DATABASE. Но я сталкиваюсь с большим количеством ситуаций, когда мне нужен полный стек.
В конце концов, TDD в Drupal не очень хорошо поддерживается, так что вы можете написать свой собственный, чтобы он работал вне инфраструктуры тестирования drupal или выдержал низкую производительность.
-- ОБНОВИТЬ --
Я успешно настроил полную интеграцию Drupal с Phactory и теперь запускаю свои тесты через phpunit вместо Drupal Web Test Case. Так что это возможно.
Надеюсь, я достигну того момента, когда смогу выпустить его, и он может быть включен в документ Phactory.
- ОБНОВЛЕНИЕ 2 -
Документ о том, как я настраиваю Phactory, находится по адресу https://github.com/trimbletodd/phactory .
Поскольку блог Марка находится в автономном режиме, я упомяну некоторые инструменты, которые его команда внедрила:
Функциональное тестирование: тестирование Selenium
Unit: упрощенный
сервер сборки:
тестирование производительности Jenkins : XDebug + Cachegrind
За два года с тех пор, как я задал этот вопрос, я видел, как некоторые дополнительные инструменты набирают популярность на сцене TDD. В настоящее время, когда вы говорите о разработке через тестирование (в контексте Drupal, конечно), у одной медали есть две стороны - фронтальное тестирование и внутреннее тестирование.
Вот две презентации, которые выделяются из последней версии Drupalcon Portland 2013:
Разработка, по номерам , бэкэнд-тестирование.
Автоматизированное тестирование с Jasmine и PhantomJS , тестирование внешнего интерфейса.
Первая презентация не связана с модульным или функциональным тестированием (строго говоря), это скорее инструменты для измерения качества кода. Тем не менее, я чувствую, что это связано с темой.
источник
Единственное, что мне известно, это то, что для добавленных модулей вы можете включить автоматическое тестирование коммитов и патчей в очереди проблем, см. Http://drupal.org/node/689990 . Это все еще несколько нестабильно, особенно если у вас есть зависимости.
Большинство проектов, вероятно, в большей степени делают что-то похожее на разработку, основанную на ошибках, которая в основном сводится к тому, чтобы сначала написать тест, когда обнаружена ошибка, а затем исправить ее. Если вообще ;)
Исходя из моего личного опыта, TDD довольно сложен в Drupal, потому что вы часто не пишите (только) модульные тесты с Simpletest, но интеграционные тесты, где вы просматриваете страницы и отправляете формы. Поэтому может быть довольно сложно заранее написать хорошие тесты. Но, может быть, я просто не привык к этому :)
источник