Як зробити тест-керовану розробку (TDD) в Drupal?


30
  • Які інструменти TDD використовуються в Drupal (модулі PHP, модулі Drupal тощо)?
  • Як виглядає ваш робочий процес на здійснення / тестування / розгортання? Чи використовуєте Ви Phing, PHPUnderControl, Hudson для управління цим робочим процесом?
  • Яким чином тестування одиниць робить ваш код надійнішим?
  • Вам потрібен окремий, дорогий, автономний тестовий сервер блоків, чи ви можете це зробити з ноутбука?

Я знаю , що Роберт написав відмінну технічну посаду тут про модульному тестуванні в Drupal з SimpleTest; Мене більше цікавить висвітлення частини робочого процесу та конфігурації. В даний час у мене є сервер розробки, постановочний і виробничий сервер. І виробничі, і сценічні майданчики працюють на 300 Мб оперативної пам'яті / 300 МГц процесор Dreamhost VPS.

Відповіді:


8

У рубіновому світі TDD сприяють інструменти, вбудовані в рамки. Factory Girl, Mocha, rSpec та інші дозволяють розробникам створювати легко та динамічно тести, що стосуються необхідних тестових випадків.

Мене також розчарувало відсутність інструментів TDD в Drupal. Моя найбільша проблема з ними - це кількість часу, яке потрібно для проведення одного тесту. Цикли розвитку не можна уповільнити за допомогою індивідуальних тестів, що займають 60-90 секунд за кожну ітерацію. Повні тестові набори попадають у кількагодинний часовий проміжок, якщо ви взагалі намагаєтеся писати тести.

Я підозрюю, що це стосується копіювання повного db кожного разу, коли тест запускається, але це, швидше за все, не зміниться найближчим часом від того, що я можу сказати, особливо якщо для цього вам потрібно використовувати DrupalWebTestCase.

Я зломлю разом рішення за допомогою Phactory і phpunit, які завантажують Drupal вручну. Очевидно, що я стикаюся з деякими проблемами, і не закінчив її, але він дійшов.

На щастя, більша частина моєї роботи знаходиться на резервному шарі, тому я можу залишитися на рівні DRUPAL_BOOTSTRAP_DATABASE. Але я біжу в більші ситуації, коли мені знадобиться повний стек.

Зрештою, TDD в Drupal недостатньо підтримується, тому ви можете написати своє власне, щоб змусити його працювати поза рамками тестування drupal або пережити низьку продуктивність.

- ОНОВЛЕННЯ -

Я успішно налаштував повну інтеграцію з Drupal з Phactory, і тепер запускаю свої тести через phpunit замість веб-тесту Drupal. Так це можливо.

Я сподіваюся, я дістанусь до моменту, коли я можу випустити його, і він може бути включений у документ Phactory.

- ОНОВЛЕННЯ 2 -

Документ про те, як я налаштовую Phactory, знаходиться на веб- сайті https://github.com/trimbletodd/phactory .


Дякую за ваш внесок. Дуже цікаво, що відбувається з Phactory для тестування одиниць. З нетерпінням чекаю, що модуль Drupal, який ви готували;)
любитель бариста

Я виклав короткий документ про те, як я поводжусь з Phactory в Drupal на своєму вилці. Я подав запит на тягу майстру, але він ще не включений. github.com/trimbletodd/phactory
trimbletodd

Це питання та його відповіді продовжують повертатися і донині. Ви гойдаєтеся для прокатки власної вилки / рішення. Тому ви отримуєте нагороду прийнятої відповіді, сер.
любительська бариста

12

Оскільки блог Марка в офлайні, я згадаю деякі інструменти, які його команда реалізувала:

Функціональне тестування: Тестування модулів селену
: Найпростіший
сервер збірки:
Бенчмаркінг продуктивності Jenkins : XDebug + Cachegrind

За два роки, коли я задав це питання, я побачив, що деякі додаткові інструменти набувають популярності на сцені TDD. Сьогодні, коли ви говорите про тестові керовані розробки (в контексті Drupal, звичайно), є дві сторони однієї і тієї ж монети - переднє тестування та тестування ззаду.

Ось дві презентації, які виділяються з останнього Drupalcon Portland 2013, що представляє цю тему:

Розробка, за номерами , бекенд-тестування.
Автоматизоване тестування Jasmine та PhantomJS , інтерфейсне тестування.

Перша презентація не пов'язана з одиничним чи функціональним тестуванням (строго кажучи), мова йде більше про інструменти для вимірювання якості коду. Тим не менш, я відчуваю, що це дещо пов'язане з темою.


1
Оце Так! Дякуємо, що повернулися через 2 РОКІ пізніше, щоб повідомити нам, що ви відкрили! Ви рок :)
Чапабу

5

Єдине, що мені відомо, - це те, що для наданих модулів ви можете ввімкнути автоматичне тестування комітетів та виправлень у черзі випуску, див. Http://drupal.org/node/689990 . Це все ще дещо нестабільно, особливо якщо у вас залежність.

Більшість проектів, ймовірно, більше роблять щось у напрямку розвитку помилок, що в основному зводиться до написання тесту спочатку, коли виявлена ​​помилка, а потім її виправлення. Якщо взагалі;)

З мого особистого досвіду, TDD досить важкий у Drupal, тому що ви часто не пишете (тільки) одиничні тести з простими, але інтеграційними тестами, де ви переглядаєте сторінки та подаєте форми. Тож заздалегідь складно написати хороші тести. Але, можливо, я просто не звикла це робити :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.