Abaixo irei mostrar uma calculadora simples, destas que a gente faz quando está iniciando.
No exemplo usarei o Delphi XE, mas creio que funcionará em outras versões.
Não vou mostrar aqui o código da calculadora nem comentar sobre o mesmo por considerar desnecessário e poque no final do post vou disponibilizar o projeto para download.
Ela basicamente tem três Edits (edtNum1, edtNum2 e edtResult) e dois botões (btnSomar e btnMultiplicar), o resto é com vocês.
Também não vou ensinar a criar um projeto de testes usando o DUnit porque não é o intuito deste post.
A primeira coisa a se fazer é adicionar ao uses da unit de testes, neste caso a unit do formulário da calculadora como mostrado a seguir.
uses TestFramework, TestExtensions, GUITesting, Unit1;O DUnit sempre que um teste é iniciado ele executar o método SetUp, e sempre que um teste é finalizado ele executa o TearDown. Para este tipo de teste isto não é desejado pois o estado da aplicação sempre será alterado cada vez que um teste for iniciado, então para resolver o problema vamos precisar de duas coisas:
Primeiro vamos criar uma subclasse de TTestSetup da unit TestExtensions. TTestSetup é um Decorator para TTestCase. Com isto você o SetUp e o TearDown será executado apenas um vez.
typeAbaixo temos a implementação do SetUp e do TearDown.
TFormSetup= class(TTestSetUp)
private
FFormCalc: TForm1;
protected
procedure SetUp; override;
procedure TearDown; override;
end;
procedure TFormSetup.SetUp;Agora estamos pronto para criar o nosso teste, então vamos lá.
begin
FFormCalc := TForm1.Create(Application);
FFormCalc.Show;
inherited;
end;
procedure TFormSetup.TearDown;
begin
FFormCalc.Free;
inherited;
end;
A primeira coisa a se fazer é criar a nossa classe de teste, note que ela deve herdar de TGUITestCase e não de TTestCase comumente utilizada.
TFormCalcTests = class(TGUITestCase)Precisamos adicionar ao Uses a unit Forms e StdCtrls.
private
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
published
procedure TesteDigitaTexto;
procedure TesteSoma;
procedure TesteMultiplicacao;
end;
uses Forms, StdCtrls, TestFramework, TestExtensions, GUITesting, Unit1;Agora vamos implementar os três testes.
procedure TFormCalcTests.TesteDigitaTexto;Propositalmente eu criei os testes dependentes, para mostrar que o formulário fora instanciado apenas uma vez.
begin
Edit1 := FindControl('edtNum1') as TEdit;
Edit1.Text := '2';
CheckEquals('2', Edit1.Text);
Edit2 := FindControl('edtNum2') as TEdit;
EnterTextInto(Edit2, '3');
CheckEquals('3', Edit2.Text);
end;
procedure TFormCalcTests.TesteMultiplicacao;
begin
Click('btnSomar');
Edit3 := FindControl('edtResult') as TEdit;
CheckEquals('5', Edit3.Text);
end;
procedure TFormCalcTests.TesteSoma;
begin
Click('btnMultiplicar');
Edit3 := FindControl('edtResult') as TEdit;
CheckEquals('6', Edit3.Text);
end;
Note que na linha 7 eu não atribui o valor direto na propriedade Text do Edit2, ao invés disto usei o método EnterTextInto, também para mostrar uma forma de simular o pressionamento das teclas. Porém neste teste você não vai perceber por ser muito rápido, para ver o efeito altere o teste para atribuir mais de um caractere a cada edit. Se ainda assim ficar muito rápido para perceber, faça um override do Create e altere a propriedade ActionDelay que por padrão é de 100ms;
constructor TFormCalcTests.Create(MethodName: string);Por último precisamos registrar o teste, que neste caso será de maneira diferente.
begin
inherited Create(MethodName);
ActionDelay := 300;
end;
initializationFontes:https://bitbucket.org/MarcioMartins/dunittestgui
RegisterTest(TFormSetup.Create(TFormCalcTests.Suite));
end.
Parabéns pelo post.
ResponderExcluirSugiro utilizar o GitHub para compartilhar os fontes, é grátis e rápido.
Tiago, muito obrigado.
ResponderExcluirSeus conselhos e ensinamentos sempre me foram muito úteis.
Kra adorei o post.. baixei os exemplos compilou blza deu para dar uma boa clareada de como testar UI.
ResponderExcluirAgora estou tentando montar para o meu projeto, com a calculadora cliquei, mudei e ficou 10.