🚀 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 @DataJpaTest reverte 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!


⬅️ Capítulo Anterior | Próximo Capítulo ➡️