Escolar Documentos
Profissional Documentos
Cultura Documentos
Show Delphi » Artigos, Dicas, Object Pascal e Strings » Refatorando padrões. Um exemplo de TDD codificado em Delphi. Artigo 01, o básico.
Patrocinado
O objetivo deste artigo não é discutir os prós e contras de TDD, teste unitário ou qualquer. O objetivo
é apenas dar alguns exemplos.
Colchão Pró-Saúde Confortável
Se necessário, para uma rápida compreensão do que é TDD ou Teste de Unidade , consulte os
R$ 449,00 - Ortobom
seguintes links.
Sponsored Links by Taboola
Veja mais sobre TDD
Veja mais sobre DUnit
No TDD você não escreve o código da aplicação primeiro, em vez disso você deve começar Navegue pelo site
escrevendo os casos de teste. Downloads
O ciclo TDD é o seguinte: Exemplos
No começo, você apenas escreve um teste e, mais tarde, mais testes podem ser adicionados.
Apostilas
Certifique-se de que o teste inicial falhe; isso validará o chicote de teste. Componentes
Adicione apenas o código necessário para passar no teste. O código não precisa ser elegante neste Data e Hora
momento. Object Pascal e Strings
Execute o teste: se falhar, você terá que voltar para a etapa 3 e corrigir seu código para passar no Validação
teste. Windows
Quando você tiver sucesso, passe para a etapa 5.
Banco de Dados
Melhore e otimize seu código: torne-o elegante, mais eficiente, Imagens
evite duplicações, etc, etc. Isso é chamado de refatoração de código.
Multimédia
Ao refatorar seu código, talvez, por acidente, você pode quebrar a funcionalidade (parar de Impressão e Relatórios
funcionar).
Miscelânea
Como você pode ter certeza de que tudo está funcionando como deveria? Redes e Internet
Apenas execute novamente o teste e ele informará se a refatoração anterior apresentou uma falha RTTI
ou não. NF-e / NFC-e
Vou numerar as colunas (coordenada X) de 1 a 8 começando no canto inferior esquerdo. Algoritmos Sequenciais
Do mesmo modo, numerarei as linhas (coordenada Y) de 1 a 8, iniciando no canto inferior esquerdo. Algoritmos com Vetores
Cada teste é composto por uma ou mais verificações. Sugiro adicionar os controles aos poucos.
Toda vez que você adiciona um cheque, você deve adicionar código da aplicação real para passar
no teste correspondente.
Agora, vamos fazer o teste falhar de propósito. Para isso, vamos adicionar uma verificação ao
procedimento SetPositionTest.
1 procedure TPieceTest.SetPositionTest;
2 begin
3 Check(True = False, '');
4 end;
Obviamente, verdadeiro nunca é falso. Então, esse teste irá falhar. Se não falhar, então algo está
errado com a sua IDE!
1 procedure TPieceTest.SetPositionTest;
2 var
3 Piece: TPiece;
4 begin
5 Piece:= TPiece.Create;
6 try
7 //Test trivial (normal) workflow
8 Check(Piece.SetPosition(4, 4) = True, '');
9 finally
10 Piece.Free;
11 end;
12 end;
Se você executar este teste, você receberá um erro de compilação! Sim está certo.
Você ainda não tem código comercial. Você acabou de fazer o teste.
É disso que se trata o TDD: teste primeiro, código de negócios mais tarde. Entenda a ideia?
Para evitar o erro de compilação, vamos codificar uma unidade separada ( chesspieces ) e
vamos adicioná-la à usos cláusula do nosso ChessPiecesTests unidade.
Execute o teste novamente e agora o erro de compilação desapareceu. No entanto, o teste falha
porque o Piece.SetPosition (4, 4) é avaliado como Falso . Frete Grátis! Frete Grátis!
Vamos adicionar o código comercial mínimo possível para passar este teste:
Reforçando que aqui o objetivo é passar como verdadeiro no teste com o mínimo possível de código.
OK, e agora? Bem, continuamos adicionando novas verificações ao teste e, sempre que isso
acontece,
precisamos adicionar um novo código de negócios para poder transmiti-lo. É muito importante
adicionar
verificações para testar os limites do que estamos tentando codificar. Não se vista de idade: Esses 17 itens
da moda fazem você parecer mais…
No exemplo abaixo haverá varias validações: Tip Parents
Sponsored Links by Taboola
1 procedure TPieceTest.SetPositionTest;
2 var
3 Piece: TPiece;
4 begin
5 Piece:= TPiece.Create;
6 try
7 //Test trivial (normal) workflow
8 Check(Piece.SetPosition(4, 4) = True, '');
9
10 //Tests boundaries
11 Check(Piece.SetPosition(1, 1) = True, '');
12 Check(Piece.SetPosition(1, 8) = True, '');
13 Check(Piece.SetPosition(8, 1) = True, '');
14 Check(Piece.SetPosition(8, 8) = True, '');
15
16 //Test beyond the boundaries
17 Check(Piece.SetPosition(3, 15) = False, '');
18 Check(Piece.SetPosition(3, -15) = False, '');
19 Check(Piece.SetPosition(15, 3) = False, '');
20 Check(Piece.SetPosition(15, 15) = False, '');
21 Check(Piece.SetPosition(15, -15) = False, '');
22 Check(Piece.SetPosition(-15, 3) = False, '');
23 Check(Piece.SetPosition(-15, 15) = False, '');
24 Check(Piece.SetPosition(-15, -15) = False, '');
25 finally
26 Piece.Free;
27 end;
O teste acima está até mesmo verificando as tentativas de posicionar uma peça fora do tabuleiro de
xadrez.
Para passar esse teste, vamos escrever algum código de negócio:
Certo, agora vamos analisar. O código acima poderia ser refatorado ou mesmo reescrito.
Os testes permanecerão os mesmos, permitindo-nos capturar quaisquer erros introduzidos com a
alteração do código.
Execute o teste e ele informará se essa refatoração (ou reimplementação) funciona corretamente.
É importante observar que um bom teste deve abranger todos os cenários e fluxos de trabalho
possíveis.
Preste atenção especial aos limites. Neste ponto, uma boa compreensão dos requisitos é
indispensável.
Finalmente, mais e mais testes serão necessários em uma aplicação no mundo real.
Cada teste terá suas próprias verificações.
Cada teste irá cobrir uma parte da funcionalidade, observe, é para isso que o teste unitário é
destinado.
Giovani Da Cruz
1.938 views
0 comentários
21 de março de 2019
Deixe um comentário
-> Como evitar o Access Violation em DLL que utilizam o Dev Express
Aqui está o que os implantes dentários de toda a boca podem custar a você em
2023
Implantes dentários | Links patrocinados
Ir ao topo