MÓDULO 9 - Testes com Spring Boot
Bem-vindo ao Módulo 9! 🧪
Sua aplicação está funcionando... mas como ter certeza de que ela sempre funcionará? Após cada modificação, após cada deploy? Os testes automatizados são sua rede de segurança.
Este módulo ensina você a escrever testes profissionais que garantem a qualidade do seu código.
🎓 Objetivos de Aprendizagem
Ao final deste módulo, você será capaz de:
- ✅ Compreender a pirâmide de testes
- ✅ Escrever testes unitários com JUnit 5
- ✅ Utilizar Mockito para mockar dependências
- ✅ Criar testes de integração com @SpringBootTest
- ✅ Testar APIs REST com MockMvc
- ✅ Medir a cobertura de código
📚 Pré-requisitos
Antes de começar este módulo, você deve ter:
- ✅ Completado os Módulos 1 a 8
- ✅ Domínio da arquitetura em 3 camadas
- ✅ Criado serviços e repositórios Spring
- ✅ Familiaridade com APIs REST
🗺️ Plano do Módulo
Parte Teórica (5 capítulos)
Capítulo 1: Introdução aos Testes
Duração: 30 minutos
Conteúdo:
- Por que testar?
- A pirâmide de testes
- Testes unitários vs integração vs E2E
- TDD e BDD
- Configuração Maven/Gradle
Por que é importante? Compreender a estratégia de testes
Capítulo 2: Testes Unitários com JUnit 5
Duração: 1 hora
Conteúdo:
- Anotações JUnit 5 (@Test, @BeforeEach, etc.)
- Asserções (assertEquals, assertTrue, assertThrows)
- Testes parametrizados
- Ciclo de vida dos testes
- Boas práticas
Por que é importante? A base de todos os testes
Capítulo 3: Mocking com Mockito
Duração: 1 hora
Conteúdo:
- Por que mockar?
- @Mock, @InjectMocks, @Spy
- when().thenReturn()
- verify() e argument matchers
- Stubbing e exceções
Por que é importante? Isolar as unidades a serem testadas
Capítulo 4: Testes de Integração
Duração: 45 minutos
Conteúdo:
- @SpringBootTest
- @DataJpaTest para repositórios
- @WebMvcTest para controllers
- TestContainers
- Perfis de teste
Por que é importante? Testar os componentes juntos
Capítulo 5: Testes REST API
Duração: 45 minutos
Conteúdo:
- MockMvc em detalhes
- WebTestClient
- Teste de respostas JSON
- Teste de erros e exceções
- RestAssured (bônus)
Por que é importante? Validar seus endpoints
Parte Prática (3 TPs)
TP9.1: Testes Unitários - Service Layer
Duração: 1h30
Objetivo: Testar uma camada de serviço completa
Você vai:
- Escrever testes para um ProductService
- Mockar o repositório
- Testar casos de sucesso e de erro
- Alcançar mais de 80% de cobertura
TP9.2: Testes de Integração - Repository
Duração: 1h30
Objetivo: Testar a persistência com um banco de dados real
Você vai:
- Utilizar @DataJpaTest
- Testar consultas personalizadas
- Verificar restrições
- Utilizar H2 para os testes
TP9.3: Testes REST API - Controller
Duração: 1h30
Objetivo: Testar a API REST completa
Você vai:
- Utilizar MockMvc
- Testar todos os endpoints CRUD
- Validar as respostas JSON
- Testar a segurança
📊 Duração Total
| Tipo | Duração |
|---|---|
| Teoria | 4h (5 capítulos) |
| Prática | 4h30 (3 TPs) |
| Total | 8h30 (~2-3 sessões) |
🎯 O Que Você Vai Compreender
Antes deste Módulo
// Você testa manualmente com Postman... 😰
// E após cada modificação:
// "Ainda está funcionando?"
// "Tenho medo de quebrar algo..."
// "Não ouso refatorar..."
Depois deste Módulo
@Test
void shouldCalculateOrderTotal() {
// Given
Order order = new Order();
order.addItem(new Item("Laptop", 1000.0, 2));
order.addItem(new Item("Mouse", 50.0, 1));
// When
double total = orderService.calculateTotal(order);
// Then
assertThat(total).isEqualTo(2050.0);
}
// ✅ 150 tests passed in 3.2s
// Coverage: 87%
// Confiança: 100% 😎
Você saberá:
- ✅ Escrever testes legíveis e fáceis de manter
- ✅ Mockar dependências corretamente
- ✅ Testar cada camada da aplicação
- ✅ Refatorar sem medo
- ✅ Detectar regressões automaticamente
🚀 Por Que Este Módulo É Essencial
1. Confiança no Código
Sem testes:
- "Acho que está funcionando" 🤞
- Medo de modificar o código existente
- Bugs descobertos em produção
Com testes:
- "Eu sei que está funcionando" ✓
- Refatoração com confiança
- Bugs detectados imediatamente
2. Documentação Viva
@Test
void userShouldNotBeAbleToWithdrawMoreThanBalance() {
// Este teste documenta uma regra de negócio!
Account account = new Account(100.0);
assertThrows(InsufficientFundsException.class,
() -> account.withdraw(150.0));
}
3. Competência Necessária
Vagas para Java:
- "TDD/BDD" ✓
- "JUnit, Mockito" ✓
- "Cobertura de código > 80%" ✓
- "Testes automatizados obrigatórios" ✓
🗺️ Progressão na Formação
Módulo 9 = Garantir a qualidade antes do deploy!
📖 Como Abordar Este Módulo
Teoria E Prática Juntas
- Capítulo 1 (Introdução) → Compreender a estratégia
- Capítulo 2 (JUnit) + TP9.1 → Praticar imediatamente
- Capítulo 3 (Mockito) → Completar o TP9.1 com mocks
- Capítulo 4 (Integração) + TP9.2 → Testes de repositório
- Capítulo 5 (API) + TP9.3 → Testes de controller
Tempo Recomendado
Opção Intensiva (1,5 dias):
- Dia 1 Manhã: Capítulos 1-2 + início TP9.1
- Dia 1 Tarde: Capítulo 3 + final TP9.1
- Dia 2 Manhã: Capítulos 4-5 + TP9.2
- Dia 2 Tarde: TP9.3
Opção Progressiva (3 sessões):
- Sessão 1: Capítulos 1-2 + TP9.1
- Sessão 2: Capítulos 3-4 + TP9.2
- Sessão 3: Capítulo 5 + TP9.3
✅ Autoavaliação
Antes de começar, responda:
- Você sabe o que é um teste unitário? ☐ Sim ☐ Não
- Já utilizou JUnit? ☐ Sim ☐ Não
- Conhece o conceito de mocking? ☐ Sim ☐ Não
- Já ouviu falar de MockMvc? ☐ Sim ☐ Não
- Sabe o que é cobertura de código? ☐ Sim ☐ Não
Após o módulo, você deverá responder "Sim" para TUDO!
🎯 Próximo Passo
Pronto para escrever testes profissionais?
➡️ Comece pelo Capítulo 1: Introdução aos Testes