Aula 11 - Testes com JUnit e Mockito 🧪
Como ter certeza de que sua API continua funcionando depois de cada mudança? Nesta aula, vamos aprender a escrever testes automatizados profissionais.
😊 Por que Testar?
Testes automatizados garantem que seu código funciona como esperado — e, mais importante, continuam funcionando conforme o sistema cresce e é modificado por várias pessoas.
Tipos de Teste
- Teste Unitário: Testa uma única unidade de código isoladamente (ex: um método do Service).
- Teste de Integração: Testa a interação entre várias camadas (ex: Controller + Service + banco real).
📊 Pirâmide de Testes
graph TD
A[Testes E2E - poucos, lentos] --> B[Testes de Integração - médios]
B --> C[Testes Unitários - muitos, rápidos] 🧠 JUnit: o Framework de Testes do Java
class ProdutoServiceTest {
@Test
void deveCalcularDescontoCorretamente() {
Produto p = new Produto("Mouse", 100.0);
double resultado = ProdutoService.aplicarDesconto(p, 10);
assertEquals(90.0, resultado);
}
}
🧠 Mockito: Simulando Dependências
Important
Lembra da Injeção de Dependências (Aula 03)? Ela é o que torna o Mockito possível: em vez de usar o Repository real (que acessaria o banco de verdade), injetamos um mock — uma versão falsa e controlada.
@ExtendWith(MockitoExtension.class)
class ProdutoServiceTest {
@Mock
private ProdutoRepository repository;
@InjectMocks
private ProdutoService service;
@Test
void deveListarProdutos() {
when(repository.findAll()).thenReturn(List.of(new Produto("Mouse", 50.0)));
List<Produto> resultado = service.listar();
assertEquals(1, resultado.size());
}
}
📊 Fluxo de um Teste com Mock
graph LR
Test[Teste] -- Configura --> Mock[Repository Mockado]
Test -- Chama --> Service
Service -- Usa --> Mock
Mock -- Retorna dado falso --> Service
Service -- Retorna --> Test
Test -- Verifica --> Assert[Assertivas] 📝 Exercícios Progressivos
- Básico: Qual a diferença entre um teste unitário e um teste de integração?
- Básico: O que faz a anotação
@Testdo JUnit? - Intermediário: Por que usamos um Mock do Repository em vez do Repository real em um teste unitário do Service?
- Intermediário: O que a Injeção de Dependências (Aula 03) tem a ver com a facilidade de mockar dependências?
- Desafio: Escreva um teste que verifica se o método
salvar()do Service lança uma exceção quando o produto tem preço negativo.
🚀 Mini-projeto: Escreva 3 testes unitários para o ProdutoService: listar produtos, salvar um produto válido e tentar salvar um produto com preço negativo.