De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Ricardo Takemura
Data de Publicação: 05 de fevereiro de 2016
Para quem não sabe o que é um teste unitário...
Define-se "teste unitário", em síntese, todo teste feito na menor unidade de uma aplicação (por exemplo, em funções e/ou procedimentos (código-fonte) de um programa).
Dadas as explicações, agora voltamos a pergunta: Como fazer um bom teste unitário? Antes de fazer um teste unitário, existem algumas coisas a se pensar:
Primeiro, precisamos definir o domínio da função ou procedimento (Hã? Matemática?), ou seja, definir um conjunto de valores válidos ("entrada") para esta função.
Se definimos o domínio, agora precisamos definir o contra-domínio desta (Matemática de novo? Isso não deveria ser informática? :P ), em termos gerais, vamos definir um conjunto de valores válidos para o resultado ("saída") da função.
Para os matemáticos de plantão, isso significa que na função y = F(x)
, se
x
pertence ao domínio da função, então y
pertence ao contra-domínio. Se x
não pertencer ao domínio, então y
não é um resultado válido.
Para facilitar as coisas, vamos ao exemplo:
Vamos criar uma função que calcula a média de notas de duas provas (a primeira de peso um, a segunda de peso dois) em uma escola:
function media(primeira: integer, segunda: integer): integer media = (primeira + 2 * segunda) / 3; //Teste Unitário ... var resultado: integer; resultado = media(5,5); assertEquals(resultado, 5); ...
Parece que a função calcula corretamente e que o teste unitário esta passando, certo?
Errado! :P
Hã, como assim?
Vamos a alguns questionamentos que podem existir:
Perceba que, como não foi definido um conjunto de valores válidos de entrada (domínio) e saída (contra-domínio), ficamos com um monte de dúvidas e não sabemos os valores que devemos testar...
Agora, se definirmos o domínio desta função:
As variáveis "primeira" e "segunda" pertencem ao conjunto dos números inteiros, tal que, "primeira" e "segunda" são valores maiores ou iguais a 0 e menores ou iguais a 10.
E o contra-domínio desta:
O resultado da função pertence ao conjunto dos números inteiros, tal que, este é um valor maior ou igual a 0 e menor ou igual a 10, sendo resultante do seguinte calculo (primeira + 2 * segunda) / 3, com valores arredondados para baixo, em caso de um resultado pertencente ao conjunto dos números reais.
Agora que sabemos quais os valores são válidos e não válidos para a função, podemos definir os seguintes testes:
//Valores maiores que 10 (domínio) ... try resultado = media(11,21); fail(); except assertTrue(true); ... //Valores menores que 0 (dominio) ... try resultado = media(-1,-1); fail(); except assertTrue(true); ... //Valor com um resultado quebrado (contra-domínio) ... resultado = media(2,7); assertEquals(resultado, 5); ...
Isso tornar o teste unitário um pouco mais "eficaz".
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários