2012-04-06 22 views
4

Gibt es ein Äquivalent von DocTest für Delphi? Ich benutze DUnit, aber ich mag die Python DocTest Idee. Ich sah eine Antwort wie here, aber ich denke, dass für einfache Funktionen ein DocTest wie OK sein könnte. Mein Ziel ist es, meine Tests im Kommentar-Header zu definieren, wenn ich die Funktion schreibe. Like:Entspricht Python DocTest in Delphi?

function Plus(i1, i2 : integer) : integer; 
//>>> Check(Plus(1, 3) = 4) 
begin 
    result := i1 + i2; 
end; 
+1

Ich habe noch nie so etwas für Delphi gefunden. Es ist viel einfacher in Python wegen der dynamischen Natur dieser Sprache. –

+0

Nicht genau das Gleiche, aber in einem kürzlich erschienenen Blog hat Jordi Corbilla eine Idee des Unit-Tests mit 'TCustomAttributes' vorgestellt. Siehe [dunit-and-tcustomattributes] (http://thundaxsoftware.blogspot.se/2012/04/dunit-and-tcustomattributes.html). Anstatt Tests in Kommentaren hinzuzufügen, werden sie als Attribute angewendet. –

+0

@LURD Dieser nette Artikel ist verwandt, aber es gibt immer noch viel Code zu schreiben: Attribute müssen einen festen Satz von Parametern haben. –

Antwort

2

Die Idee ist, dass Sie eine „Konsole“ ausgeben, einige Ergebnisse zu Testcode verwenden können, dann die Ausgabe Textinhalt mit einem erwarteten Wert vergleichen.

Werfen Sie einen Blick auf die regression tests available with the great DWSScript Open Source project. Sie werden einige .pas-Dateien und einige verwandte .txt-Dateien finden.

Zum Beispiel abs.pas:

var vf = 1.5; 
var vi = 2; 

var i : Integer := Abs(-vi); 
PrintLn(i); 
PrintLn(Abs(vi)); 

var f : Float := Abs(-vf); 
PrintLn(f); 
PrintLn(Abs(vf)); 

und den entsprechenden abs.txt Inhalt:

2 
2 
1.5 
1.5 

AFAIK gibt es keine bereits bestehende Lösung mittlerweile in der Delphi-Welt zu integrieren.

Wenn Sie den Test in den Kommentar schreiben, fehlt die IDE-Autovervollständigung, und das Objekt Pascal Design wird etwas beschädigt. Es wäre etwas einfach mit DWS, aber erfordern, den Delphi-Compiler der Befehlszeile aufzurufen. Ehrlich gesagt, sehe ich nicht, was falsch ist, wenn Sie Ihre eigenen Einheiten für Tests haben. Ein kleines Stück Code mit einer for..to Schleife mit festen und zufälligen Werten wird eine viel bessere Testabdeckung haben als ein fester Satz von Parametern.

+0

Hallo Arnaud. Meine Frage war nicht, wie man Ergebnisse an eine Konsole sendet, sondern mehr, wie man Tests in den Header-Kommentaren der Funktionen skriptet. Ich bearbeite meine Frage ... – philnext

+0

@Arnaud Ich kämpfe um zu sehen, wie überhaupt das Python doctest ähnlich ist, aber vielleicht fehlt mir etwas. –

+0

@philnext Dies ist keine echte Konsole, sondern eine virtuelle Konsole, die zu Testzwecken verwendet wird.Sie können den Inhalt in die Kommentare der Funktionskopfzeile schreiben und dann mit Hilfe von DWS (im Falle von AWD). Aber natürlich müssen Sie den Testquellcode kompilieren (mit dcc.exe). Für einen Quellenparser, um die Header zu extrahieren, siehe z.B. [Der Castalia-Parser] (https://github.com/jacobthurman/Castalia-Delphi-Parser). –