Das OpenCTF-Komponenten-Test-Framework erstellt automatische Tests für alle (visuellen und nicht visuellen) VCL-Komponenten in einer Delphi-Anwendung. Es basiert auf dem Dunit -Framework und integriert sich gut in vorhandene Testprojekte.
Dieses Beispiel -Testprojekt enthält eine Form und einen Rahmen.
program FormTests;
uses
OpenCTF,
ctfConfig, // configure OpenCTF with our test classes
GUITestRunner,
TestForm in ' TestForm.pas ' { Form1 } ,
TestFrame in ' TestFrame.pas ' { Frame1: TFrame } ;
begin
OpenCTF.RegisterFormClasses([TForm1, TFrame1]);
RunRegisteredTests;
end .Das Framework verwendet maßgeschneiderte TComponentHandler -Unterklassen, um die Komponententests zu erstellen.
In diesem Beispiel möchten wir nur die Timagelist -Komponenten testen, sodass wir den Konstruktor überschreiben, die zu testenden Klassen zu spezifizieren.
TImageListTests = class (TComponentHandler)
protected
procedure AddTests ; override;
public
constructor Create;
end ;
...
constructor TImageListTests.Create;
begin
inherited Create(Controls.TImageList); // test only this class (and subclasses)
end ;
procedure TImageListTests.AddTests ;
begin
inherited ;
CurrentSuite.AddTest(TImageListMustContainImages.Create(CurrentComponent)); // see below
// add more tests ...
end ;
Unsere benutzerdefinierte Testklasse stammt von tcomponentTest (was wiederum ein Dunit -Tabractest ist). So können wir alle CheckKequals / checkNotequals / ... Methoden der Dunit verwenden. In unserem Beispiel testen wir nur, dass die Anzahl der Bilder im Imagelisten nicht gleich Null ist. Beachten Sie, dass für jede Komponente auf dem Formular eine T -ComponentTest -Instanz erstellt wird und ihre Komponenteneigenschaft auf die zu testende Komponente verweist.
TImageListMustContainImages = class (TComponentTest)
protected
procedure RunTest (testResult: TTestResult); override;
end ;
procedure TImageListMustContainImages.RunTest ;
begin
inherited ;
CheckNotEquals( 0 , (Component as TImageList).Count, ' ImageList is empty ' );
end ;Jetzt müssen wir den Test zu unserem Setup hinzufügen. Dies muss vor der Registrierung der Formularklassen geschehen.
program FormTests;
uses
OpenCTF,
ctfTestControls, // unit containing my custom TImageList tests
GUITestRunner,
TestForm in ' TestForm.pas ' { Form1 } ,
TestFrame in ' TestFrame.pas ' { Frame1: TFrame } ;
begin
OpenCTF.Add(TImageListTests.Create);
OpenCTF.RegisterFormClasses([TForm1, TFrame1]);
RunRegisteredTests;
end .Anstatt die Konfiguration in die Projektquelldatei (DPR) zu platzieren, können Sie dort ein Gerät schreiben und alle Tests (und erforderliche Einheiten) einschließen.
program FormTests;
uses
OpenCTF,
ctfConfig, // unit containing my custom configuration
GUITestRunner,
TestForm in ' TestForm.pas ' { Form1 } ,
TestFrame in ' TestFrame.pas ' { Frame1: TFrame } ;
begin
OpenCTF.RegisterFormClasses([TForm1, TFrame1]);
RunRegisteredTests;
end .Das Konfigurationsbeispiel führt alle Setups im Abschnitt "Initialisierungsabschnitt" aus. Dies spart das Tippen im Projektquellcode, füge nur die CTFConfig -Einheit hinzu, und Tests werden dem Framework hinzugefügt.
unit ctfConfig;
interface
implementation
uses
OpenCTF,
ctfTestForm, ctfTestNames, ctfTestTabOrder, ctfTestMenus,
StdCtrls, ExtCtrls, Forms, Classes;
initialization
OpenCTF.Add(TBasicFormTests.Create);
OpenCTF.Add(TComponentNameTests.Create);
OpenCTF.Add(TTabOrderTests.Create);
OpenCTF.Add(TMenuItemTests.Create);
end . In einigen Fällen können Tests für einige Klassen übersprungen werden. Beispielsweise kann die strenge Regel, dass jede Komponente einen nicht defekten Namen ('Taste1' und 'Button2') haben muss.
Die Konfiguration ermöglicht es, einige Klassen von einem bestimmten Test auszuschließen. Hier ist der Initialisierungsabschnitt mit zusätzlichen Ausgründen:
initialization
OpenCTF.Add(TBasicFormTests.Create);
OpenCTF.Add((TComponentNameTests.Create)
.Exclude(StdCtrls.TLabel) // exclude TLabel
.Exclude(Forms.TFrame) // exclude TFrame
.Exclude(ExtCtrls.TPanel) // exclude TPanel
);
OpenCTF.Add(TTabOrderTests.Create);
OpenCTF.Add(TMenuItemTests.Create);
end . Zusammengestellt und getestet mit Delphi 2009.
Eine kompatible Version von Delphi und Dunit ist erforderlich, um das Framework zu verwenden.
https://michaeljustin.github.io/openck
OpenCTF kann verwendet werden, ohne das Build -Skript auszuführen. Die Build -Skripte sind für OpenCTF -Entwickler nützlich. Sie generieren die API -Dokumentation, kompilieren die Beispielprojekte und erstellen ein Quellverteilungspaket.
Apache Ant: https://ant.apache.org
Doxygen: http://www.doxygen.nl
pas2dox 0.41: https://sourceforge.net/projects/pas2dox/