Le cadre de test des composants OpenCTF aide à créer des tests automatiques pour tous les composants VCL (visuels et non visuels) dans une application Delphi. Il est basé sur le framework DUNIT et s'intègre bien aux projets de test existants.
Cet exemple de projet de test contient une forme et une image.
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 .Le framework utilise des sous-classes TomponentHandler personnalisées pour construire les tests de composants.
Dans cet exemple, nous voulons tester uniquement les composants timagelist, nous remplacez donc le constructeur pour spécifier les classes à tester.
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 ;
Notre classe de test personnalisée est dérivée de TComponentTest (qui à son tour est un DUNIT TabStractTest). Nous pouvons donc utiliser tous les méthodes de contrôle / vérification de contrôle / ... ... Pour notre exemple, nous testons seulement que le nombre d'images dans l'imageste n'est pas égal à zéro. Notez que pour chaque composant du formulaire, une instance TComponentTest sera créée et sa propriété composante pointe vers le composant testé.
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 ;Nous devons maintenant ajouter le test à notre configuration. Cela doit se produire avant d'enregistrer les classes de formulaire.
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 .Au lieu de placer la configuration dans le fichier source du projet (DPR), vous pouvez écrire une unité et y inclure tous les tests (et unités requises).
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 .L'exemple de configuration effectue toute la configuration dans la section d'initialisation. Cela enregistre la saisie du code source du projet, seulement l'ajout de l'unité CTFConfig et des tests seront ajoutés au cadre.
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 . Dans certains cas là-bas, les tests peuvent être ignorés pour certaines classes. Par exemple, la règle stricte selon laquelle chaque composant doit avoir un nom non défaut ('Button1' et 'Button2') peut être trop strict.
La configuration permet d'exclure certaines classes d'un test spécifique. Voici la section d'initialisation avec des exclusions supplémentaires:
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 . Compilé et testé avec Delphi 2009.
Une version compatible de Delphi et Dunit est nécessaire pour utiliser le cadre.
https://michaeljustin.github.io/openctf/
OpenCTF peut être utilisé sans exécuter le script de construction. Les scripts de construction sont utiles pour les développeurs OpenCTF. Ils génèrent la documentation de l'API, compilent les projets d'exemples et construisent un package de distribution source.
Apache Ant: https://ant.apache.org
Doxygen: http://www.doxygen.nl
PAS2DOX 0.41: https://sourceforge.net/projects/pas2dox/