Pular para o conteúdo principal

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:

  1. ✅ Compreender a pirâmide de testes
  2. ✅ Escrever testes unitários com JUnit 5
  3. ✅ Utilizar Mockito para mockar dependências
  4. ✅ Criar testes de integração com @SpringBootTest
  5. ✅ Testar APIs REST com MockMvc
  6. ✅ 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​

TipoDuração
Teoria4h (5 capítulos)
Prática4h30 (3 TPs)
Total8h30 (~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​

  1. Capítulo 1 (Introdução) → Compreender a estratégia
  2. Capítulo 2 (JUnit) + TP9.1 → Praticar imediatamente
  3. Capítulo 3 (Mockito) → Completar o TP9.1 com mocks
  4. Capítulo 4 (Integração) + TP9.2 → Testes de repositório
  5. 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:

  1. Você sabe o que é um teste unitário? ☐ Sim ☐ Não
  2. Já utilizou JUnit? ☐ Sim ☐ Não
  3. Conhece o conceito de mocking? ☐ Sim ☐ Não
  4. Já ouviu falar de MockMvc? ☐ Sim ☐ Não
  5. 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


⬅️ Voltar ao Plano de Curso