Wie testgesteuerte Entwicklung (TDD) in Drupal zu tun?

30
  • Welche Tools werden in Drupal für TDD verwendet (PHP-Module, Drupal-Module usw.)?
  • Wie sieht Ihr Workflow für das Festschreiben / Testen / Bereitstellen aus? Verwenden Sie Phing, PHPUnderControl, Hudson zur Verwaltung dieses Workflows?
  • Inwiefern macht Unit-Tests 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 schrieb hier über Unit - Tests in Drupal mit Simple; Ich bin mehr daran interessiert, den Workflow- und Konfigurationsteil abzudecken. Derzeit habe ich eine Entwicklungsmaschine, einen Staging- und einen Produktionsserver. Sowohl Produktions- als auch Bühnenstandorte werden mit 300 MB RAM / 300 MHz CPU Dreamhost VPS betrieben.

Amateur Barista
quelle

Antworten:

8

In der Ruby-Welt wird TDD durch in das Framework integrierte Tools erleichtert. Mit Factory Girl, Mocha, rSpec und anderen können Entwickler einfach und dynamisch Tests erstellen, die die benötigten Testfälle adressieren.

Der Mangel an TDD-Tools in Drupal hat mich ebenfalls frustriert. Mein größtes Problem ist, wie lange es dauert, einen einzelnen Test durchzuführen. Die Entwicklungszyklen können nicht durch einzelne Tests verlangsamt werden, die jeweils 60 bis 90 Sekunden dauern. Vollständige Testsuiten würden mehrere Stunden in Anspruch nehmen, wenn Sie sich die Mühe machen, die Tests überhaupt zu schreiben.

Ich vermute, es hat mit dem Kopieren einer vollständigen Datenbank bei jedem Testlauf zu tun, aber das wird sich in naher Zukunft wahrscheinlich nicht ändern, was ich sagen kann, besonders wenn Sie dazu DrupalWebTestCase verwenden müssen.

Ich hacke eine Lösung mit Phactory und phpunit zusammen, die Drupal manuell bootet. Offensichtlich sind einige Probleme aufgetreten und haben es noch nicht beendet, aber es kommt dahin.

Glücklicherweise liegt der Großteil meiner Arbeit auf der Backend-Ebene, sodass ich auf der Ebene DRUPAL_BOOTSTRAP_DATABASE bleiben kann. Aber ich stoße auf mehr Situationen, in denen ich den vollen Stack brauche.

Letztendlich wird TDD in Drupal nicht gut unterstützt, so dass Sie Ihr eigenes schreiben können, damit es außerhalb des Drupal-Test-Frameworks funktioniert oder die schlechte Leistung erträgt.

- UPDATE -

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

Hoffentlich komme ich zu einem Punkt, an dem ich es veröffentlichen und in das Phactory-Dokument integrieren kann.

- UPDATE 2 -

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

Trimbletodd
quelle
Danke für Ihren Beitrag. Es ist sehr interessant, was mit Phactory für Unit-Tests los ist. Ich freue mich darauf, zu sehen, dass Sie Drupal-Modul gekocht haben;)
Amateur Barista
Ich habe einen kurzen Überblick über den Umgang mit Phactory in Drupal auf meiner Gabel. Ich habe eine Pull-Anfrage an den Master gesendet, diese wurde jedoch noch nicht berücksichtigt. github.com/trimbletodd/phactory
trimbletodd
Diese Frage und ihre Antworten kommen immer wieder auf diesen Tag zurück. Du rockst, um deine eigene Gabel / Lösung zu rollen. Aus diesem Grund erhalten Sie den anerkannten Antwortpreis, Sir.
Amateur Barista
12

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

Funktionstest: Selen
Unit Test: Simpletest
Build Server: Jenkins
Performance Benchmarking: XDebug + Cachegrind

In den zwei Jahren, seit ich diese Frage gestellt habe, haben einige zusätzliche Tools in der TDD-Szene an Beliebtheit gewonnen. Wenn man heutzutage von Test Driven Development spricht (im Drupal-Kontext natürlich), hat eine 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-Tests.
Automatisierte Tests mit Jasmine und PhantomJS , Frontend-Tests.

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

Amateur Barista
quelle
1
Wow! Vielen Dank, dass Sie 2 JAHRE später zurückgekommen sind, um uns mitzuteilen, was Sie entdeckt haben! Sie rocken :)
Chapabu
5

Das einzige, was mir bekannt ist, ist, dass Sie für beigestellte Module das automatische Testen von Commits und Patches in der Problemwarteschlange aktivieren können (siehe http://drupal.org/node/689990) . 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, erst dann einen Test zu schreiben, wenn ein Fehler gefunden wurde, und ihn dann zu beheben. Wenn überhaupt ;)

Nach 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 senden. Es kann also ziemlich schwierig sein, gute Tests im Voraus zu schreiben. Aber vielleicht bin ich das einfach nicht gewohnt :)

Berdir
quelle