🚀 7.3 Testes de Integração: Harmonia de Componentes
Diferente dos testes unitários, os Testes de Integração verificam se as diferentes camadas do sistema (Controller, Service, Repository) estão trabalhando em harmonia. Eles garantem que a configuração do Spring Boot 3.5 e do Jakarta Persistence está correta.
Testando Repositórios com @DataJpaTest
Esta anotação de elite carrega apenas os componentes necessários para testar a persistência, utilizando um banco de dados em memória (H2) por padrão, o que os torna rápidos e seguros.
@DataJpaTest
class ClienteRepositoryTest {
@Autowired
private ClienteRepository repository;
@Test
@DisplayName("Deve persistir um cliente e buscá-lo pelo nome")
void deveSalvarCliente() {
// Preparação
Cliente cliente = Cliente.builder().nome("Rodrigo").endereco("Sampa").build();
// Ação
repository.save(cliente);
// Verificação
Optional<Cliente> found = repository.findByNome("Rodrigo");
assertThat(found).isPresent();
assertThat(found.get().getEndereco()).isEqualTo("Sampa");
}
}O Poder do @SpringBootTest
Quando precisamos testar a aplicação de ponta a ponta, carregando todo o contexto do Spring, utilizamos a anotação @SpringBootTest.
- Foco: Fluxos complexos que envolvem múltiplas camadas.
- Performance: Mais pesada que o
@DataJpaTest, pois inicializa todos os beans. - Web Environment: Podemos subir um servidor real em uma porta aleatória (
RANDOM_PORT).
IMPORTANT
Transacional por Padrão: O
@DataJpaTestreverte todas as transações ao final de cada teste. Isso garante que um teste não “suje” o banco de dados para o próximo, mantendo a Idempotência.
Estamos prontos para o desafio final do módulo: testar nossas telas e fluxos Web sem abrir o navegador!