Как сделать Test Driven Development (TDD) в Drupal?

30
  • Какие инструменты используют TDD в Drupal (модули PHP, модули Drupal и т. Д.)?
  • Как выглядит ваш рабочий процесс commit / test / deploy? Используете ли вы Phing, PHPUnderControl, Hudson для управления этим рабочим процессом?
  • Каким образом модульное тестирование делает ваш код более надежным?
  • Вам нужен отдельный, дорогой, автономный сервер модульных тестов, или вы можете сделать это с ноутбука?

Я знаю , что Роберт написал отличную техническую должность здесь о модульном тестировании в Drupal с SimpleTest; Я больше заинтересован в освещении рабочего процесса и части конфигурации. В настоящее время у меня есть машина для разработки, постановка и производственный сервер. Как производственные, так и сценические площадки работают на 300 МБ ОЗУ / 300 МГц CPU Dreamhost VPS.

любитель бариста
источник

Ответы:

8

В мире рубинов 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 .

trimbletodd
источник
Спасибо за ваш вклад. Очень интересно, что происходит с Phactory для модульного тестирования. Будем рады видеть, что модуль Drupal вы уже готовите;)
бариста-любитель
Я быстро показал, как я обращаюсь с Phactory в Drupal на своей вилке. Я отправил запрос на извлечение мастеру, но он еще не был включен. github.com/trimbletodd/phactory
trimbletodd
Этот вопрос и его ответы продолжают возвращаться к этому дню. Вы качаете для того, чтобы катить свою собственную вилку / решение. Поэтому вы получаете награду за принятый ответ, сэр.
любитель бариста
12

Поскольку блог Марка находится в автономном режиме, я упомяну некоторые инструменты, которые его команда внедрила:

Функциональное тестирование: тестирование Selenium
Unit: упрощенный
сервер сборки:
тестирование производительности Jenkins : XDebug + Cachegrind

За два года с тех пор, как я задал этот вопрос, я видел, как некоторые дополнительные инструменты набирают популярность на сцене TDD. В настоящее время, когда вы говорите о разработке через тестирование (в контексте Drupal, конечно), у одной медали есть две стороны - фронтальное тестирование и внутреннее тестирование.

Вот две презентации, которые выделяются из последней версии Drupalcon Portland 2013:

Разработка, по номерам , бэкэнд-тестирование.
Автоматизированное тестирование с Jasmine и PhantomJS , тестирование внешнего интерфейса.

Первая презентация не связана с модульным или функциональным тестированием (строго говоря), это скорее инструменты для измерения качества кода. Тем не менее, я чувствую, что это связано с темой.

любитель бариста
источник
1
Вот Это Да! Спасибо, что пришли 2 года спустя, чтобы сообщить нам, что вы обнаружили! Вы
качаетесь
5

Единственное, что мне известно, это то, что для добавленных модулей вы можете включить автоматическое тестирование коммитов и патчей в очереди проблем, см. Http://drupal.org/node/689990 . Это все еще несколько нестабильно, особенно если у вас есть зависимости.

Большинство проектов, вероятно, в большей степени делают что-то похожее на разработку, основанную на ошибках, которая в основном сводится к тому, чтобы сначала написать тест, когда обнаружена ошибка, а затем исправить ее. Если вообще ;)

Исходя из моего личного опыта, TDD довольно сложен в Drupal, потому что вы часто не пишите (только) модульные тесты с Simpletest, но интеграционные тесты, где вы просматриваете страницы и отправляете формы. Поэтому может быть довольно сложно заранее написать хорошие тесты. Но, может быть, я просто не привык к этому :)

Berdir
источник