El marco de prueba de componentes OpenCTF ayuda a crear pruebas automáticas para todos los componentes VCL (visuales y no visuales) en una aplicación Delphi. Se basa en el marco Dunit y se integra bien con los proyectos de prueba existentes.
Este proyecto de prueba de ejemplo contiene una forma y un cuadro.
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 .El marco utiliza subclases personalizadas de TComponeDandler para construir las pruebas de componentes.
En este ejemplo, queremos probar solo los componentes de Timagelist, por lo que anulamos el constructor para especificar las clases a probar.
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 ;
Nuestra clase de prueba personalizada se deriva de TComponentTest (que a su vez es un Dunit TabstractTest). Por lo tanto, podemos usar todos los checkequals / checknotequals / ... métodos de dunit. Para nuestro ejemplo, solo probamos que el número de imágenes en el ImageList no es igual a cero. Tenga en cuenta que para cada componente en el formulario, se creará una instancia TComponentTest, y su propiedad de componente apunta al componente en prueba.
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 ;Ahora necesitamos agregar la prueba a nuestra configuración. Esto debe suceder antes de registrar las clases de formulario.
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 .En lugar de colocar la configuración en el archivo fuente del proyecto (DPR), puede escribir una unidad e incluir todas las pruebas (y las unidades requeridas) allí.
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 .El ejemplo de configuración realiza toda la configuración en la sección de inicialización. Esto guarda la escritura en el código fuente del proyecto, solo agregue la unidad CTFCONFIG y se agregarán pruebas al marco.
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 . En algunos casos, las pruebas se pueden omitir para algunas clases. Por ejemplo, la regla estricta de que cada componente debe tener un nombre de no deformación ('Button1' y 'Button2') puede ser demasiado estricto.
La configuración permite excluir algunas clases de una prueba específica. Aquí está la sección de inicialización con excluencias adicionales:
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 . Compilado y probado con Delphi 2009.
Se requiere una versión compatible de Delphi y Dunit para usar el marco.
https://michaeljustin.github.io/openctf/
OPENCTF se puede usar sin ejecutar el script de compilación. Los scripts de compilación son útiles para los desarrolladores de OpenCTF. Generan la documentación de la API, compilan los proyectos de ejemplo y crean un paquete de distribución de fuente.
Apache Ant: https://ant.apache.org
Doxygen: http://www.doxygen.nl
PAS2DOX 0.41: https://sourceforge.net/projects/pas2dox/