TDD em Java do zero: como os testes mudam o código e salvam os nervos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que TDD não é sobre "escrever testes", mas sobre "pensar de forma diferente"

\n\n

Imagine que você está construindo uma casa. Você tem plantas, materiais e uma equipe. Mas você começa a colocar tijolos sem verificar a fundação. Um mês depois, descobre que as paredes estão rachadas. Familiar? Na programação, isso é chamado de "depois a gente conserta". E "depois" geralmente acontece às 3 da manhã antes do deploy.

\n\n

Desenvolvimento Orientado a Testes (TDD — Test-Driven Development) é uma técnica que vira o processo de cabeça para baixo. Você não escreve o código e depois os testes. Você primeiro escreve o teste — e só depois o código que passa nesse teste. Parece loucura? Na prática, isso economiza horas, nervos e deixa o código mais limpo que o ar da manhã nas montanhas.

\n\n

Neste artigo, vamos analisar o TDD em Java com exemplos concretos. Nada de enrolação — apenas código, o ciclo Red-Green-Refactor e cenários reais. Vamos nessa.

\n\n

O que é TDD e como funciona o ciclo Red-Green-Refactor

\n\n

O TDD é baseado em três etapas simples, que se repetem ciclicamente:

\n\n
    \n
  • Red — escrevemos um teste que não passa (ele deve falhar).
  • \n
  • Green — escrevemos o código mínimo para o teste passar.
  • \n
  • Refactor — melhoramos o código sem alterar seu comportamento. Os testes permanecem verdes.
  • \n
\n\n

Parece que isso desacelera o desenvolvimento. Na verdade, acelera. Você para de adivinhar "será que isso funciona?". Você sabe: funciona, porque o teste está verde.

\n\n

Princípios principais do TDD

\n
    \n
  • Não escreva uma única linha de código de produção sem um teste.
  • \n
  • O teste deve ser o mais simples possível e verificar exatamente um comportamento.
  • \n
  • O código é escrito apenas o suficiente para o teste passar. Nada de "vamos colocar isso também só por precaução".
  • \n
\n\n

Agora vamos para Java e JUnit 5 — o framework mais popular para testes unitários.

\n\n

Configuração do projeto: Maven, JUnit 5 e estrutura

\n\n

Para os exemplos, usaremos Maven. Adicione a dependência no pom.xml:

\n\n
<dependency>\n    <groupId>org.junit.jupiter</groupId>\n    <artifactId>junit-jupiter-api</artifactId>\n    <version>5.10.0</version>\n    <scope>test</scope>\n</dependency>
\n\n

A estrutura de pastas é padrão para Maven:

\n
src/\n  main/java/com/exemplo/\n  test/java/com/exemplo/
\n\n

Todas as classes de teste são colocadas em src/test/java. O nome da classe de teste geralmente corresponde ao nome da classe testada + o sufixo Test. Por exemplo, Calculator → CalculatorTest.

\n\n

Primeiro ciclo TDD: criando uma calculadora do zero

\n\n

Tarefa: criar o método add(int a, int b), que retorna a soma. Pelo TDD, começamos não pela classe, mas pelo teste.

\n\n

Passo 1: Red — escrevemos um teste que vai falhar

\n\n
import org.junit.jupiter.api.Test;\nimport static org.junit.jupiter.api.Assertions.*;\n\npublic class CalculatorTest {\n\n    @Test\n    void shouldAddTwoNumbers() {\n        Calculator calc = new Calculator();\n        int result = calc.add(2, 3);\n        assertEquals(5, result);\n    }\n}
\n\n

Tentamos executar — o compilador reclama: a classe Calculator não existe. Ótimo, a luz vermelha está acesa.

\n\n

Passo 2: Green — escrevemos o código mínimo

\n\n

Criamos a classe Calculator com um método que simplesmente retorna a soma:

\n\n
public class Calculator {\n    public int add(int a, int b) {\n        return a + b;\n    }\n}
\n\n

Executamos o teste — verde. A implementação mínima possível funcionou.

\n\n

Passo 3: Refactor

\n\n

Nesta etapa, o código já é simples, não há nada para refatorar. Mas imagine que queremos renomear o método ou adicionar uma verificação de estouro. Fazemos isso, e o teste ainda passa. Se algo quebrar — o teste falhará e apontará imediatamente o problema.

\n\n

Compl

Blogs

Book Recommendations