Anzeige
Anzeige
Entwicklung
Artikel merken

Eine Einführung in Unit-Testing für Extensions: Grünes Gefühl mit TYPO3

Große Änderungen im Code einer Software gleichen oft einem Drahtseilakt und enden nicht selten mit einem Absturz. Durch kleine durchdachte Schritte und ein fundiertes Sicherheitsnetz bleibt das Risiko kalkulierbar und lässt den Entwickler mit einem guten Gefühl in die Zukunft blicken.

4 Min. Lesezeit
Anzeige
Anzeige

Irgendwann gelangt jeder Entwickler an den Punkt, an dem er überlegt,
ob es sich eher lohnt, den angestaubten Code zu überarbeiten
oder noch einmal frisch von vorne zu beginnen. Vor allem bei der
Übernahme eines fremden Projekts überwiegt oft der Drang
nach einem Neuanfang. Es würde meist viel zu lange dauern, den Code
aufzuräumen und bei jeder kleinen Änderung könnten
sich Fehler einschleichen, die später aufwändig nachvollzogen und bereinigt werden
müssten.

Anzeige
Anzeige

Die
Arbeit an einer API (Application Programming Interface) ist besonders heikel, denn dort stellt sich die
Frage nach einem Neuanfang erst gar nicht: Es gilt, möglichst
abwärtskompatibel zu bleiben, denn viele andere Anwendungen sind
von der Schnittstelle abhängig. Die Aufräumarbeiten in
solchen Programmteilen gleichen daher oft dem Spaziergang auf einem
Minenfeld.

Programmieren mit Netz

Die Lösung für diese
Probleme heißen „Refactoring“ und „Unit Testing“. Bei „Refactoring“ handelt
es sich um die Veränderung der inneren Struktur eines
Programms, bei dem sich das äußere Verhalten nicht
verändert. „Unit Tests“ dienen dabei als Sicherheitsnetz und geben
dem Entwickler eine Rückmeldung darüber, ob einzelne Teile
seines Programms noch die gewünschten Resultate liefern.

Anzeige
Anzeige

Unit Tests überprüfen
jeweils einen ganz bestimmten Teil einer Software, typischerweise das
Ergebnis einer oder mehrerer Methoden. Funktionale Tests, die hier
nicht behandelt werden, überprüfen hingegen die Funktionen
einer Software als Gesamtheit aus Sicht eines Anwenders.

Anzeige
Anzeige

Unit Testing für TYPO3

PHPUnit [1] von Sebastian Bergmann ist ein Unit
Testing Framework das es ermöglicht, eine große Reihe von
Tests zusammenzufassen und nacheinander ablaufen zu lassen.

T3Unit ist eine Erweiterung für TYPO3, die
auf PHPUnit2 aufbaut und um ein Interface sowie einige Funktionen
erweitert ist, die speziell für TYPO3 notwendig sind. Die Extension
basiert auf PHP5 und wurde für das Refactoring des Extension
Repositories entwickelt. Sie wird auf der TYCON3 im September
vorgestellt und veröffentlicht.

Anzeige
Anzeige

Ein Hello-You-Beispiel

Am besten verwendet man Unit-Tests bereits bei der Entwicklung von neuem Code und nicht erst beim Refactoring.

Angenommen es soll eine Funktion geschrieben werden, die einen
Namen als Parameter akzeptiert und als Resultat „hello $name“
liefert. Bevor man diese Funktion programmiert, würde man einen Test schreiben, der die spätere Methode überprüft:

PHP
public function test_helloYou() {
     $exampleObj = new tx_example;
     $result = $exampleObj->helloYou ('robert');
     self::assertEquals ($result, 'Hello robert', 'The result of helloYou() was not as expected!');
}

Listing 1

In Zeile 2 wird eine Instanz der Klasse erzeugt, die getestet werden soll, um danach die zu testende Methode aufzurufen und das
Resultat zu speichern. Schließlich wird eine PHPUnit-Funktion
aufgerufen, die das gelieferte Ergebnis mit dem Soll-Ergebnis
vergleicht – wenn dieses vom erwarteten Wert abweicht wird eine
Fehlermeldung ausgegeben.

Anzeige
Anzeige

Beim Ausführen dieses Tests wird der PHP-Interpreter
mit einem „Fatal Error“ darauf aufmerksam machen, dass die Klasse
„tx_example“ gar nicht existiert. Diese muss zunächst angelegt werden:

PHP
class tx_example {
    public function helloYou ($name) {
    }
}

Listing 2

Nach erneutem Aufrufen des Unit-Tests wird folgende
(erwartete) Fehlermeldung ausgegeben:

Der Unit-Test ist nicht erfüllt, da die Methode „helloYou“ kein Ergebnis zurück liefert, der Unit-Test jedoch eines erwartet.

Anzeige
Anzeige

Im letzten Schritt sorgen wir nun dafür, dass der Test sein
erwartetes Ergebnis erhält:

PHP
class tx_example {
     public function helloYou ($name) {
         return 'Hello '.$name;
     }
}

Listing 3

Die TYPO3-Extension „T3Unit“ belohnt erfolgreiche Testverläufe mit einem grünen Fortschrittbalken
im Backend:

Test
Driven Development

Das Besondere an diesem Vorgehen ist, dass ein Test
geschrieben wird, bevor die zu testende Funktion überhaupt existiert. Man konzentriert sich von Anfang an auf das gewünschte
Ergebnis und sorgt so dafür, dass dieses auch geliefert
wird.

Anzeige
Anzeige

Während der weiteren Arbeit sammeln sich so eine ganze Reihe von
Tests an, die immer wieder ausgeführt werden. Auf diese Art und Weise
kann sichergestellt werden, dass alle wichtigen Funktionen auch nach
größeren Änderungen im Quellcode korrekt ablaufen.

Die Methode des „Test Driven Development“ [2] ist ein Baustein des Extreme Programming
(XP) [3], das eine bessere Produktivität und Erfolg von
Softwareprojekten zum Ziel hat.

Fazit

Unit
Testing ist weit mehr als ein gut gemeinter Trend. Viele Aufgaben, wie die
Umstrukturierung existierenden Codes, sind ohne solide Tests
zeitaufwändig und schwer kontrollierbar. Auch wenn es auf den ersten
Blick nicht so aussieht wird die zusätzliche Arbeit für die
Programmierung eines Tests schnell mit einem großen Zeitgewinn durch
den Wegfall langer „Debug-Sessions“ belohnt.

Anzeige
Anzeige

Ein weiterer Faktor, der nicht zu unterschätzen ist, scheint
psychologischer Natur zu sein: Unit Tests geben dem Entwickler eine gewisse
Sicherheit und Souveränität. Wer eine Zeit lang mit Tests gearbeitet
hat, wird das gute Gefühl beim Erscheinen des grünen Balkens nicht
vermissen wollen. Hektische „Debug-Sessions“ vor dem Launch einer Website sollten somit der Vergangenheit angehören.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige