🧪 Projeto Prático - Testes Unitários com Java

Aula: Testes Unitários
Professor: Ricardo
Data: 2026-03-02
Tecnologia: Java 17 + JUnit 5


🎯 Objetivo do Projeto

Este projeto demonstra na prática os conceitos de testes unitários usando JUnit 5.

O que você vai aprender:

  • ✅ Configurar JUnit 5 em projeto Maven
  • ✅ Escrever testes seguindo estrutura AAA (Arrange, Act, Assert)
  • ✅ Usar assertions para validar resultados
  • ✅ Testar exceções com assertThrows
  • ✅ Criar testes parametrizados com múltiplos cenários
  • ✅ Executar testes no VS Code

🏗️ Estrutura do Projeto

projeto-pratico/
├── src/
│   ├── main/java/br/com/etec/testes/
│   │   ├── Calculadora.java      # Operações matemáticas
│   │   └── StringUtils.java      # Utilidades para strings
│   └── test/java/br/com/etec/testes/
│       ├── CalculadoraTest.java   # Testes da calculadora
│       └── StringUtilsTest.java   # Testes das strings
├── pom.xml                        # Configuração Maven
└── README.md                      # Este arquivo

⚙️ Pré-requisitos

Software Necessário:

  • Java 17+ (OpenJDK ou Oracle JDK)
  • Apache Maven 3.8+
  • VS Code com Extension Pack for Java
  • Git (opcional, para versionamento)

Verificar instalação:

java -version     # Deve mostrar Java 17+
mvn -version      # Deve mostrar Maven 3.8+

🚀 Como Executar

1. Clone/baixe o projeto

git clone <repository-url>
cd projeto-pratico

2. Compile o projeto

mvn compile

3. Execute os testes

# Todos os testes
mvn test
 
# Com relatório detalhado
mvn test -Dtest.showSuccess=true
 
# Apenas uma classe de teste
mvn test -Dtest=CalculadoraTest

4. Visualizar cobertura de código

mvn jacoco:report
# Abrir: target/site/jacoco/index.html

🧪 Executando no VS Code

Método 1: Interface gráfica

  1. Abrir pasta do projeto no VS Code
  2. Aguardar Extension Pack Java carregar
  3. Painel Test Explorer (🧪) no lado esquerdo
  4. Clicar em ▶️ Run All Tests

Método 2: Botões nos arquivos

  1. Abrir arquivo CalculadoraTest.java
  2. Clicar ▶️ ao lado de @Test
  3. Ver resultados no terminal

Método 3: Terminal integrado

# No terminal do VS Code (Ctrl+`)
mvn test

📊 Interpretando os Resultados

✅ Testes Passando (Verde)

[INFO] Tests run: 25, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS

❌ Testes Falhando (Vermelho)

[ERROR] Tests run: 25, Failures: 2, Errors: 1, Skipped: 0
[ERROR] BUILD FAILURE

Failures:
  deveSomarDoisNumeros(CalculadoraTest): expected:<5> but was:<8>

📈 Relatório de Cobertura

  • Verde: Código coberto por testes
  • Amarelo: Parcialmente coberto
  • Vermelho: Não testado
  • Meta: 70%+ de cobertura

🎓 Conceitos Demonstrados

1. Estrutura AAA

@Test
void deveSomarDoisNumeros() {
    // ARRANGE - Preparar dados
    Calculadora calc = new Calculadora();
 
    // ACT - Executar ação
    int resultado = calc.somar(2, 3);
 
    // ASSERT - Verificar resultado
    assertEquals(5, resultado);
}

2. Testes Parametrizados

@ParameterizedTest
@CsvSource({
    "2, 3, 5",
    "10, 20, 30",
    "-5, 5, 0"
})
void deveSomarCorretamente(int a, int b, int esperado) {
    assertEquals(esperado, calc.somar(a, b));
}

3. Testando Exceções

@Test
void deveLancarExcecaoParaDivisaoPorZero() {
    assertThrows(IllegalArgumentException.class,
                () -> calc.dividir(10, 0));
}

4. Organização com @Nested

@Nested
@DisplayName("Operações Básicas")
class OperacoesBasicas {
    // Testes relacionados agrupados
}

📂 Classes do Projeto

📄 Calculadora.java

Funcionalidades:

  • ➕ Soma, subtração, multiplicação, divisão
  • 🔢 Potenciação, raiz quadrada, fatorial
  • ✅ Verificação de número par/primo
  • 📊 Cálculo de média

Casos especiais testados:

  • Divisão por zero → IllegalArgumentException
  • Raiz de número negativo → IllegalArgumentException
  • Overflow no fatorial → ArithmeticException

📄 StringUtils.java

Funcionalidades:

  • 🔄 Verificação de palíndromo
  • 📝 Contagem de palavras
  • 📧 Validação básica de email
  • 🔤 Capitalização de palavras
  • 🌍 Remoção de acentos
  • 🔢 Verificação numérica

Casos especiais testados:

  • Strings null e vazias
  • Formatação e case sensitivity
  • Validação de CPF (formato)

🔧 Troubleshooting

❌ Erro: @Test não reconhecido

// Verificar import
import org.junit.jupiter.api.Test;

❌ Testes não aparecem no VS Code

  1. Ctrl+Shift+P → “Java: Clean Workspace”
  2. Fechar e reabrir pasta
  3. Verificar Extension Pack for Java instalado

❌ Maven não baixa dependências

mvn dependency:resolve -U

❌ Conflitos de versão Java

# Verificar JAVA_HOME
echo $JAVA_HOME         # Linux/Mac
echo %JAVA_HOME%        # Windows
 
# Configurar se necessário
export JAVA_HOME=/path/to/java17

📈 Estatísticas dos Testes

Calculadora: 30+ testes

  • ✅ Operações básicas: soma, subtração, multiplicação, divisão
  • ✅ Operações avançadas: potência, raiz, fatorial
  • ✅ Verificações: par/ímpar, primo
  • ✅ Casos excepcionais: divisão por zero, overflow

StringUtils: 25+ testes

  • ✅ Manipulação: palíndromo, inversão, capitalização
  • ✅ Validação: email, CPF (formato), numérico
  • ✅ Contagem: palavras, ocorrências de caracteres
  • ✅ Edge cases: null, vazio, espaços

Cobertura esperada: 85%+


🚀 Próximos Passos

Para aprofundar seus estudos:

  1. 📚 TDD (Test-Driven Development)

    • Escrever teste ANTES do código
    • Ciclo Red → Green → Refactor
  2. 🎭 Mockito para dependências

    • Simular banco de dados, APIs externas
    • Test doubles (mocks, stubs)
  3. 📊 Cobertura avançada

    • Mutation testing com PITest
    • Análise de qualidade com SonarQube
  4. ⚙️ Integração Contínua

    • Executar testes automaticamente no GitHub Actions
    • Quality gates e deploy automático

Exercícios sugeridos:

  • Adicionar classe ContaBancaria com saques/depósitos
  • Implementar ValidadorCPF com algoritmo real
  • Criar testes de integração com banco H2
  • Configurar pipeline CI/CD no GitHub

📚 Material de Referência

Documentação oficial:

Leituras recomendadas:

  • “Clean Code” - Capítulo 9 (Unit Tests)
  • “Test Driven Development by Example” - Kent Beck

Comunidades:

  • Stack Overflow: [java] [junit5]
  • JavaBrasil Telegram
  • r/java (Reddit)

👨‍🏫 Sobre a Aula

Metodologia: Teórico-prática (90 minutos)
Abordagem: Hands-on com live coding
Foco: Fundamentos sólidos para qualidade profissional

Feedback e contato:

📧 Email: ricardo@etec.sp.gov.br
💬 Teams: Prof. Ricardo


🎯 Sucesso = Confiança para testar qualquer código Java!

Pratique, experimente e construa software com qualidade profissional. 🚀

0 items neste arquivo.