Home » Tutorials » Tools » Unit-Tests mit DUnit

Unit-Tests mit DUnit

Tests implementieren

Nun haben wir also das Grundgerüst für unsere Tests der Unit DemoClass. Allerdings werden bisher einfach nur die Methoden aufgerufen, ohne dass geprüft wird, ob überhaupt das Richtige passiert.
Beginnen wir mit dem Test der Methode Add, der bislang so aussieht:

procedure TestTDemoClass.TestAdd;
var
  ReturnValue: Integer;
  b: Integer;
  a: Integer;
begin
  // TODO: Methodenaufrufparameter einrichten
  ReturnValue := FDemoClass.Add(a, b);
  // TODO: Methodenergebnisse prüfen
end;

Als erstes legen wird den Wert für a und b fest. Der Aufruf von Add mit a und b war bereits generiert; das Ergebnis wird in der Variablen ReturnValue abgelegt. Nun müssen wir nur noch definieren, was der erwartete ReturnValue ist.
Das schreiben wir wie folgt:

CheckEquals(12, ReturnValue);

Der erste Parameter von CheckEquals ist das erwartete Ergebnis (hier 12). Der zweite Parameter ist die Variable, die dagegen verglichen werden soll. Der Test sieht jetzt so aus:

procedure TestTDemoClass.TestAdd;
var
  ReturnValue: Integer;
  b: Integer;
  a: Integer;
begin
  a := 4;
  b := 8;
  ReturnValue := FDemoClass.Add(a, b);
  CheckEquals(12, ReturnValue);
end;

Und jetzt können wir den Test auch einmal laufen lassen, um zu sehen, was passiert. Mit einem Klick auf das kleine grüne Dreieck (Strg+Shift+F9) öffnet sich das Fenster von DUnit. In diesem Fenster ist oben in der Leiste nochmal so ein kleines grünes Dreieck. Wenn man dort drauf klickt, startet der Test.


Nach der Ausführung der Tests wird das Ergebnis farblich dargestellt. Ein grünes Kästchen bedeutet, dass der Test erfolgreich durchgelaufen ist. Rosa bedeutet, dass ein Fehler aufgetreten ist. In der unteren Hälfte des Fensters wird die Statistik auch noch in Zahlen ausgegeben.


Nun sind wir aber streng mit unserem Code und denken, dass dieser eine Test für die Methode Add nicht reicht! Wir brauchen noch einen zweiten, weil wir wissen wollen, wie die Methode reagiert, wenn wir eine negative Zahl addieren. Also müssen wir wohl oder übel noch einen weiteren Testfall anlegen.
Dafür gehen wir im Code des Testfalls in den Interface-Teil und fügen eine weitere Methode ein:

  published
    procedure TestAdd;
    procedure TestAddNegative;
    procedure TestGetData;

Über Strg+Shift+C lassen wir uns den Methodenrumpf im Implementierungsteil generieren (funktioniert nicht in Starter-Editionen). Dort hinein kopieren wir den bestehenden Add-Testfall und ändern nur die Werte, die beim Aufruf übergeben werden sollen. Wir setzen b auf -8 und erwarten deshalb den ReturnValue -4. Die neue Testmethode sieht nun so aus:

procedure TestTDemoClass.TestAddNegative;
var
  ReturnValue: Integer;
  b: Integer;
  a: Integer;
begin
  a := 4;
  b := -8;
  ReturnValue := FDemoClass.Add(a, b);
  CheckEquals(-4, ReturnValue);
end;

Wer sehen will, was passiert, wenn ein Testfall fehlschlägt, lässt bei CheckEquals noch die 12 von vorhin stehen und führt dann die Tests aus.