Olá pessoal, neste artigo abordarei sobre a utilização do Dunit um framework em vem junto com o Delphi que ajuda a fazer teste unitário.

Bem o conceito de Teste unitário surgia da ideia do ken beck em suas praticas de XP,no Delphi já existia o projeto Dunit desde 2002 e foi incorporado no Delphi na versão 2010.

Mas vamos ao que interessa imagina a seguinte telas


Figura 1. Layout Inicial


Figura 2. Incluir dois Cachorros.


Figura 3. Incluir três Aves.


Figura 4. Selecionando

Temos um RadioGroup com dois valores, sendo quando selecionar algum destes valores sera modificado o valor do combobox e quando clicar no botão selecionar ele mostrar no label o valor escolhido do combobox.

Listagem 1: Criar o nosso Teste

 TestTForm1 = class(TGUITestCase)
  protected
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure Hookup;
  end;

Como sabemos o Setup e o tearDown é executado a cada teste para que o nosso teste não seja tão custoso criar e destruir o formulário.

Listagem 2: Criar um Suite

  TForm1Setup = class(TTestSetup)
  private
    FForm1 : TForm1;
  protected
    procedure SetUp; override;
    procedure TearDown; override;
  end;

Listagem 3: Códigos de nossas classes

  TestTForm1 = class(TGUITestCase)
  protected
    procedure TearDown; override;
  published
    procedure Hookup;
    procedure TestQtdValoresComboCachorro;
    procedure TestQtdValoresComboAve;
    procedure TestClickBotaoSelecionarCombo;
  end;

Retornara a seguinte tela:


Figura 5. DUnit - Test Hierarchy

Listagem 4: Implementando o teste

procedure TestTForm1.TestClickBotaoSelecionarCombo;
var
  rGroup: TRadioGroup;
  cBox : TComboBox;
  lbl: TLabel;
begin
  rGroup := FindControl('RadioGroup1') as TRadioGroup;
  rGroup.itemindex :=0;
  cBox := FindControl('ComboBox1') as TComboBox;
  cBox.ItemIndex:=2;
  CheckEquals(cBox.Items.Count, 2);
  Click('Button1');
  lbl := FindControl('Label2') as TLabel;
  CheckEquals(cBox.Text, lbl.Caption);
end;


procedure TestTForm1.TestQtdValoresComboCachorro;
var
  rGroup: TRadioGroup;
  cBox : TComboBox;
begin
  rGroup := FindControl('RadioGroup1') as TRadioGroup;
  rGroup.itemindex :=0;
  cBox := FindControl('ComboBox1') as TComboBox;
  CheckEquals(cBox.Items.Count, 2);
end;

procedure TestTForm1.TestQtdValoresComboAve;
var
  rGroup: TRadioGroup;
  cBox : TComboBox;
begin
  rGroup := FindControl('RadioGroup1') as TRadioGroup;
  rGroup.itemindex :=1;
  cBox := FindControl('ComboBox1') as TComboBox;
  CheckEquals(cBox.Items.Count, 3);
end;

Após executar o nosso teste podemos ver que todos passaram com sucesso


Figura 6. Testes realizados com sucesso.

Agora vamos imaginar que tivemos que acrescentar mais um valor no nosso combo quando for escolhido o animal cachorro


Figura 7. Adicionando mais um Cachorro.

Após a nossa alteração vamos rodar o nosso teste


Figura 8. Realizando novamente o teste.

Podemos ver que ele esperava 2 item e agora tem 3 item, assim corrigimos o nosso teste para que ele possa passar novamente.

Listagem 5: Implementando mais um item

procedure TestTForm1.TestQtdValoresComboCachorro;
...
  CheckEquals(cBox.Items.Count, 3);
...

Bem isso ajuda no nosso dia a dia pra testar certas funcionalidades de nossas interfaces.