it-swarm.com.de

Wie mache ich Test Driven Development (TDD) in Drupal?

  • Welche Tools werden in TDD in Drupal (PHP-Module, Drupal Module usw.)) verwendet?
  • Wie sieht Ihr Commit/Test/Deployment-Workflow aus? Verwenden Sie Phing, PHPUnderControl, Hudson zur Verwaltung dieses Workflows?
  • Inwiefern macht Unit-Test Ihren Code zuverlässiger?
  • Benötigen Sie einen separaten, teuren, eigenständigen Unit-Test-Server oder können Sie dies von einem Laptop aus tun?

Ich weiß, dass Robert einen ausgezeichneten technischen Beitrag geschrieben hat hier über Unit-Tests in Drupal mit SimpleTest; ich bin mehr daran interessiert, den Workflow- und Konfigurationsteil abzudecken. Derzeit habe ich einen Entwicklungsmaschine, Staging- und Produktionsserver. Sowohl Produktions- als auch Bühnenstandorte werden auf einer 300 MB RAM/300 MHz CPU Dreamhost VPS ausgeführt.

29
amateur barista

In der Welt Ruby) wird TDD durch in das Framework integrierte Tools unterstützt. Mit Factory Girl, Mocha, rSpec und anderen können Entwickler einfach und dynamisch Tests erstellen, die die erforderlichen Testfälle behandeln.

Ich war auch frustriert über den Mangel an TDD-Tools in Drupal. Mein größtes Problem bei ihnen ist die Zeit, die für die Durchführung eines einzelnen Tests benötigt wird. Entwicklungszyklen können nicht durch einzelne Tests verlangsamt werden, die 60 bis 90 Sekunden pro Iteration dauern. Vollständige Testsuiten würden mehrere Stunden dauern, wenn Sie sich die Mühe machen, die Tests überhaupt zu schreiben.

Ich vermute, es hat damit zu tun, dass jedes Mal, wenn ein Test ausgeführt wird, eine vollständige Datenbank kopiert wird, aber das wird sich in naher Zukunft wahrscheinlich nicht ändern, insbesondere wenn Sie dazu DrupalWebTestCase verwenden müssen.

Ich hacke eine Lösung mit Phactory und phpunit zusammen, die manuell bootstraps Drupal. Offensichtlich stoßen wir auf einige Probleme und haben sie noch nicht fertiggestellt, aber sie kommen an.

Glücklicherweise befindet sich der größte Teil meiner Arbeit auf der Backend-Ebene, sodass ich auf der Ebene DRUPAL_BOOTSTRAP_DATABASE bleiben kann. Aber ich bin in mehr Situationen geraten, in denen ich den vollen Stapel brauche.

Am Ende wird TDD in Drupal wird nicht gut unterstützt, sodass Sie Ihre eigenen schreiben können, damit es außerhalb des Testframeworks drupal) funktioniert, oder das aushalten schwache Leistung.

- UPDATE -

Ich habe erfolgreich eine vollständige Drupal-Integration mit Phactory eingerichtet und führe meine Tests jetzt über phpunit anstelle des Drupal Web-Testfalls aus. Es ist also möglich.

Ich werde hoffentlich einen Punkt erreichen, an dem ich es veröffentlichen und es in das Phactory-Dokument integrieren kann.

- UPDATE 2 -

Informationen zum Einrichten von Phactory finden Sie unter https://github.com/trimbletodd/phactory .

8
trimbletodd

Da Marks Blog offline ist, werde ich einige der Tools erwähnen, die sein Team implementiert hat:

Funktionsprüfung: Selen
Unit-Test: Einfachster Test
Server erstellen: Jenkins
Leistungsbenchmarking: XDebug + Cachegrind

In den zwei Jahren, seit ich diese Frage gestellt habe, habe ich gesehen, dass einige zusätzliche Tools in der TDD-Szene immer beliebter wurden. Wenn Sie heutzutage von testgetriebener Entwicklung sprechen (in einem Drupal -Kontext natürlich)), hat dieselbe Medaille zwei Seiten - Front-End-Tests und Back-End-Tests.

Hier sind zwei Präsentationen, die sich von der neuesten Drupalcon Portland 2013 abheben und diese Angelegenheit repräsentieren:

Entwicklung, nach Zahlen , Backend-Test.
Automatisierte Tests mit Jasmine und PhantomJS , Frontend-Tests.

Die erste Präsentation bezieht sich nicht auf Unit- oder Funktionstests (genau genommen), sondern eher auf Tools zur Messung der Codequalität. Trotzdem habe ich das Gefühl, dass es etwas mit dem Thema zu tun hat.

13
amateur barista

Das einzige, was mir bekannt ist, ist, dass Sie für beigesteuerte Module das automatisierte Testen von Commits und Patches in der Problemwarteschlange aktivieren können, siehe - http://drupal.org/node/68999 . Es ist immer noch etwas instabil, besonders wenn Sie Abhängigkeiten haben.

Die meisten Projekte tun wahrscheinlich eher etwas im Sinne einer fehlergesteuerten Entwicklung, bei der es im Grunde darum geht, zuerst einen Test zu schreiben, wenn ein Fehler gefunden wurde, und ihn dann zu beheben. Wenn überhaupt ;)

Aus meiner persönlichen Erfahrung ist TDD in Drupal ziemlich schwierig, da Sie häufig nicht (nur) Komponententests mit Simpletest schreiben, sondern Integrationstests, bei denen Sie Seiten anzeigen und Formulare einreichen. Daher kann es ziemlich schwierig sein, gute Tests im Voraus zu schreiben. Aber vielleicht bin ich das einfach nicht gewohnt :)

5
Berdir