Lektion 01 - TDD
Test Driven Development: Erst Test, dann Code
Test Driven Development, kurz TDD, ist eine Arbeitsweise beim Programmieren. Du schreibst nicht zuerst die fertige Loesung, sondern zuerst einen Test, der beschreibt, was dein Code koennen soll. Danach schreibst du nur so viel Code, bis der Test erfolgreich ist.
1. Warum TDD?
Beim normalen Coden passiert oft Folgendes: Man schreibt viel Code, startet das Programm, klickt herum und merkt irgendwann, dass etwas nicht stimmt. TDD dreht diese Arbeitsweise um. Du definierst zuerst die Erwartung. Dadurch weisst du genauer, wann eine Aufgabe wirklich geloest ist.
2. Die TDD-Schleife: Red, Green, Refactor
TDD arbeitet in kleinen Wiederholungen. Diese Schleife ist das Herz von TDD. Du gehst nicht direkt zur perfekten Loesung, sondern arbeitest Schritt fuer Schritt.
Red:
Schreibe einen Test.
Der Test muss erst fehlschlagen, weil der Code noch fehlt.
Green:
Schreibe die kleinste Menge Code, damit der Test besteht.
Refactor:
Raeume den Code auf.
Die Tests muessen danach weiterhin bestehen.
Wichtig: Wenn ein neuer Test sofort gruen ist, prueft er wahrscheinlich nicht das, was du wirklich testen wolltest.
3. Beispiel: Punktebewertung testen
Stell dir vor, du brauchst eine Funktion hasPassed. Sie soll
true zurueckgeben, wenn mindestens 50 Punkte erreicht wurden.
Bei weniger Punkten soll sie false liefern.
import 'package:test/test.dart';
bool hasPassed(int points) {
return points >= 50;
}
void main() {
test('gibt true zurueck, wenn Punkte mindestens 50 sind', () {
expect(hasPassed(50), true);
expect(hasPassed(80), true);
});
test('gibt false zurueck, wenn Punkte unter 50 sind', () {
expect(hasPassed(49), false);
expect(hasPassed(0), false);
});
}
test beschreibt einen einzelnen Testfall. expect
beschreibt, welches Ergebnis erwartet wird. Wenn die Funktion etwas anderes
zurueckgibt, ist der Test rot.
4. Was testest du genau?
Ein guter Test ist konkret. Er testet nicht "alles irgendwie", sondern einen klaren Fall. Besonders wichtig sind normale Faelle, Grenzwerte und ungueltige Werte.
5. TDD bei Flutter
In Flutter kannst du Logik und Widgets testen. Logiktests sind meist einfacher, weil sie keine Benutzeroberflaeche brauchen. Widget-Tests pruefen, ob ein Widget richtig angezeigt wird oder auf Klicks reagiert.
flutter test
Dieser Command startet die Tests im Projekt. Typisch liegen Tests im Ordner
test/. Eine Testdatei heisst oft zum Beispiel
counter_test.dart.
6. Uebungen
- Schreibe eine Funktion
isAdult(int age). - Schreibe zuerst Tests fuer
17,18und25. - Implementiere danach die Funktion.
- Schreibe eine Funktion
calculateBonus(int points). - Teste Grenzwerte:
0,99,100. - Erklaere schriftlich, welcher Schritt Red, Green und Refactor war.