A estrutura de teste do componente OpenCTF ajuda a criar testes automáticos para todos os componentes VCL (visuais e não visuais) em um aplicativo Delphi. É baseado na estrutura do Dunit e integra -se bem aos projetos de teste existentes.
Este exemplo de projeto de teste contém um formulário e um quadro.
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 .A estrutura usa subclasses personalizadas do TComponentHandler para criar os testes de componentes.
Neste exemplo, queremos testar apenas componentes timagelistas, então substituímos o construtor para especificar as classes a serem testadas.
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 ;
Nossa classe de teste personalizada é derivada do TComponentTest (que, por sua vez, é um TabStractTest Dunit). Para que possamos usar todos os métodos de Dunit. Para o nosso exemplo, testamos apenas que o número de imagens na lista de imagens não é igual a zero. Observe que, para cada componente no formulário, uma instância do TComponentTest será criada e seu componente aponta para o componente em teste.
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 ;Agora precisamos adicionar o teste à nossa configuração. Isso deve acontecer antes de registrar as classes do formulário.
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 .Em vez de colocar a configuração no arquivo de origem do projeto (DPR), você pode escrever uma unidade e incluir todos os testes (e unidades necessárias) lá.
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 .O exemplo de configuração executa toda a configuração na seção de inicialização. Isso salva a digitação no código -fonte do projeto, adicionar apenas a unidade CTFConfig e os testes serão adicionados à estrutura.
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 . Em alguns casos, os testes podem ser ignorados para algumas aulas. Por exemplo, a regra estrita de que todo componente deve ter um nome não padrão ('Button1' e 'Button2') pode ser muito rigoroso.
A configuração permite excluir algumas classes de um teste específico. Aqui está a seção de inicialização com exclusão adicional:
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 e testado com Delphi 2009.
Uma versão compatível do Delphi e Dunit é necessária para usar a estrutura.
https://michaeljustin.github.io/openctf/
O OpenCTF pode ser usado sem executar o script de compilação. Os scripts de construção são úteis para desenvolvedores de OpenCTF. Eles geram a documentação da API, compilam os projetos de exemplo e criam um pacote de distribuição de origem.
Apache Ant: https://ant.apache.org
Doxygen: http://www.doxygen.nl
Pas2dox 0.41: https://sourceforge.net/projects/pas2dox/