🧪 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-pratico2. Compile o projeto
mvn compile3. 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=CalculadoraTest4. Visualizar cobertura de código
mvn jacoco:report
# Abrir: target/site/jacoco/index.html🧪 Executando no VS Code
Método 1: Interface gráfica
- Abrir pasta do projeto no VS Code
- Aguardar Extension Pack Java carregar
- Painel Test Explorer (🧪) no lado esquerdo
- Clicar em ▶️ Run All Tests
Método 2: Botões nos arquivos
- Abrir arquivo
CalculadoraTest.java - Clicar ▶️ ao lado de
@Test - 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
nulle 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
Ctrl+Shift+P→ “Java: Clean Workspace”- Fechar e reabrir pasta
- 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:
-
📚 TDD (Test-Driven Development)
- Escrever teste ANTES do código
- Ciclo Red → Green → Refactor
-
🎭 Mockito para dependências
- Simular banco de dados, APIs externas
- Test doubles (mocks, stubs)
-
📊 Cobertura avançada
- Mutation testing com PITest
- Análise de qualidade com SonarQube
-
⚙️ Integração Contínua
- Executar testes automaticamente no GitHub Actions
- Quality gates e deploy automático
Exercícios sugeridos:
- Adicionar classe
ContaBancariacom saques/depósitos - Implementar
ValidadorCPFcom 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. 🚀