1
resposta

Testes unitários e regras de negócio

Boa noite pessoal,

Gostaria de aprofundar um ponto discutido no curso e aproveitar para trocar experiência com os colegas. Trabalho como desenvolvedor e já venho buscando aplicar os testes unitários no dia a dia, mas em alguns momentos chego a ter a impressão de estar implementando um teste muito simples, que fico na dúvida se deveria existir. Ao mesmo tempo, ao não testar, a cobertura do código diminui e a confiança em fazer refatorações também.

Na aula sobre TDD foi colocado que um teste unitário deve representar uma regra de negócio. Inclusive, na fase de refatoracao (depois de fazer uma primeira função que passava no teste), essa função foi quebrada em duas na aula (criou-se a função 'eh_socio'.

Até aqui, sempre carreguei o entendimento de que um teste unitário deve testar uma unidade de codigo, ou seja, uma função. Desta forma, vinha pemsando em criar um teste para cada função, o que às vezes leva a uns testes meio bobos.

Gostei da ideia de o teste representar a regra de negócio e agora faz mais sentido a ideia de que os testes podem representar uma documentação dessas regras.

Gostaria apenas de confirmar se é essa mesmo a prática e discutir um pouco essa quebra: o teste unitário então nao é para testar uma funcao, mas sim uma regra de negócio.

Agradeço a todos desde já. Parabéns a todos envolvidos no curso .

1 resposta

Olá, João. Tudo bem?

Agradeço pela paciência em aguardar um retorno aqui no fórum.

De modo geral, podemos dizer que os testes unitários servem para verificar isoladamente se as menores unidades do código funcionam conforme o esperado, garantindo que a lógica de implementação está correta. As unidades de um código são as menores partes do sistema, ou seja, podem ser métodos, funções, pacotes utilizados no projeto, etc.

Assim, já que essas menores unidades de código representam em forma de código os requisitos do software, podemos entender os testes como uma averiguação e documentação das regras de negócio do projeto.

Nos modelos tradicionais de desenvolvimento primeiro escrevemos o código, para depois escrever um teste que valide esse trecho de código. Já com o TDD escrevemos primeiramente os testes, para depois implementar o código para esses testes.

Testar é importante independente do modelo de desenvolvimento adotado, por mais que pareça desnecessário naquele momento, pois conforme o sistema vai crescendo e a quantidade de código vai aumentando, bugs podem ser inseridos no projeto e poderão passar despercebidos caso não existam testes para garantir que essas regras de negócio continuarão sendo seguidas.

Para se aprofundar mais no assunto, deixo como recomendação alguns materiais: Um artigo da Caelum sobre Test-Driven Develpment, que fala sobre a prática do TDD, traz uma discussão interessante sobre diferenças, vantagens e desvantagens em aplicar o TDD ou escrever os testes depois. E um podcast do Hipsters onde acontece uma conversa sobre testes, TDD, automação e qualidade.

Espero ter ajudado. Qualquer dúvida estou a disposição.

Abraços. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!