Quantcast
Channel: Comentários sobre: Sobre abstração e testes
Viewing all articles
Browse latest Browse all 8

Por: marcusalexandresilva

$
0
0

Simplificando ao máximo o “meu” ponto de vista:

Testes de Integração: Qualquer tipo de teste que seu IoC não aponte para Mocks e Stubs, ou seja, se você não envolve um terceiro componente tecnológico como banco de dados, arquivos ou hora do sistema não posso chamar de teste “integrado”. Eu identifico os testes de integração facilmente quando sei que um “corpo estranho” aos testes pode alterar seu resultado e mesmo assim seu código continuará correto.

Testes Unitários: Você já explicou bem antes, o teste da menor parte divisível do código, basicamente que envolva apenas um método.

Testes Funcionais: Teste de um conjunto de funções que juntas formam um requisito. ‘N’ testes unitários podem substituir um teste funcional no que diz respeito ao correto funcionamento do sistema, porém um teste funcional tem uma característica insubstituível: Ele documenta o Requisito.

Um exemplo bobo:
Requisito: Calcular os valores de ‘x’ de uma função de segundo grau:

Testes Unitários:
[TestMethod]
void TestarCalcularValorDelta(); //testa: int ObterDelta(int a, int b, int c);
[TestMethod]
void TestarCalcularValorX1(); //testa: int ObterX1(int delta, int a, int b, int c);
[TestMethod]
void TestarCalcularValorX2(); //testa: int ObterX2(int delta, int a, int b, int c);

Teste Funcional:
void TestarCalcularFuncao2Grau(); //testa: int[] CalcularFuncaoSegundoGrau(int a, int b, int c);

Neste exemplo estupido, eu ainda poderia fazer algum tipo de teste integrado se os valores de a, b, e c fossem obtidos a partir de um arquivo planilha.

Note que, os três métodos (ObterDelta, ObterX1 e ObterX2) são muito fracos para merecer sua própria classe, pois não fazem sentido em nenhum outro contexto de calculo. A menos que você seja “Orientado a purismo” ou sofra de Paternite (lembrado o Quaiato) estes caras são métodos da classe CalculoFuncaoSegundoGrau.
Se eu garantir que os 3 funcionam COM CERTEZA eu garanto que TestarCalcularFuncao2Grau também funciona.
Mais estes 3 testes não documentam meu requisito, coisa que o TestarCalcularFuncao2Grau faz. Daí o meu entendimento que este é o teste funcional por estar intimamente ligado ao requisito. Além disto, se você programa por TDD c/ Baby Steps você não conhece os 3 testes unitários antes de conhecer o teste funcional, sendo ele sempre seu ponto de partida.

Este é o motivo de, quando alguma coisa no sistema falha, falham pelo menos dois testes: O que identifica o requisito e pelo menos um teste unitário que rastreia o erro do requisito.

Consegui ser claro? (Já falei várias vezes: meu português e didática são péssimos…)


Viewing all articles
Browse latest Browse all 8