Egal ob du ein kleines Projekt oder ein grosses Projekt entwickelst, ist das Testen des Codes heutzutage ein Muss. Wenn man sein Code ohne zu Testen veröffentlicht, erhält man vielleicht sofort kein Problem, aber die schlimmste Probleme sind die jenige, die man übersehen hat. Mit der TDD (Test Driven Development) respektive Testgetriebene Entwicklung wird die Wahrscheinlichkeit ein potenzielles/zukünftiges Problem verhindert.
Was ist TDD, Testgetriebene Entwicklung?
Kurz und bündig: Bei der Testgetriebene Entwicklung werden die Tests zuerst danach die Codes erstellt. Der Code wird anhand von diesen Tests Schritt für Schritt entwickelt. Somit werden unnötige Codes/Funktionen/Klassen vermieden.
TDD nach Kent Beck
Unit-Tests und mit ihnen getestete Units werden stets parallel entwickelt. Die eigentliche Programmierung erfolgt in kleinen, wiederholten Mikroiterationen. Eine solche Iteration, die nur wenige Minuten dauern sollte, hat drei Hauptteile, die man im englischen Red-Green-Refactor nennt.
Red: Schreibe einen Test, der ein neues zu programmierendes Verhalten (Funktionalität) prüfen soll. Dabei fängt man mit dem einfachsten Beispiel an. Dieser Test wird vom vorhandenen Programmcode erst einmal nicht erfüllt, muss also fehlschlagen.
Green: Ändere den Programmcode mit möglichst wenig Aufwand ab und ergänze ihn, bis er nach dem anschliessend angestossenen Testdurchlauf alle Tests besteht.
Räume dann im Code auf (Refactoring): Entferne Wiederholungen (Code-Duplizierung), abstrahiere wo nötig, richte ihn nach den verbindlichen Code-Konventionen aus etc. Nach jeder Änderung werden die Tests ausgeführt, ihr Fehlschlag verbietet es, die offenbar fehlerhafte Änderung schon in den genutzten Code zu übernehmen. Ziel des Aufräumens ist es, den Code schlicht und verständlich zu machen.
Stub Objekte
Die Stub Objekte sind die Test-Dummys (externe Dateien, Json, XML usw.) Zum Beispiel wenn eine Klasse die Kunden-Daten von einer externen Schnittstelle (andere Klasse, Datenbank, externe App) benötigt, kann man mit Stub-Objekte diese benötigte Daten simulieren.
Mock Objekte
Die Mock Objekte sind die interne Codes. Damit der Projekt in der lokalen Umgebung unabhängig von externen Schnittstellen funktioniert, werden die bestehende Codes, die mit externen Schnittstellen kommunizieren, mit eigenen Test-Codes simuliert.
Vorteile von der Testgetriebene Entwicklung
- kein ungetesteter Code, somit können Sie ruhig schlafen 🙂
- saubere Code-Architektur durch TDD
- keine Redundanzen durch Refactoring
Testgetriebene Entwicklung konzentiert sich meistens auf Unit-Test. Es gibt andere Arten von Testing sowie Behavior Driven Development. Aber die Grundidee aller Testing-Konzepten ist das Testing 🙂
In dem nächsten Artikel werde ich einen Unit-Test und einen Acceptance Test mit Codeception erstellen. Bis dann…