DEV Community

Cover image for Teste de Integração com Banco de Dados
Gilson Silva
Gilson Silva

Posted on

Teste de Integração com Banco de Dados

Introdução

Testes de integração são uma parte essencial da pirâmide de testes, pois garantem que diferentes partes do sistema funcionem corretamente quando integradas. No contexto de uma aplicação que utiliza um banco de dados, os testes de integração verificam se as operações de persistência de dados estão funcionando conforme o esperado. Neste artigo, vamos explorar um exemplo simples de teste de integração com o banco de dados usando a classe PlanetRepositoryTest.

O que é o PlanetRepositoryTest?

A classe PlanetRepositoryTest é um teste de integração que verifica se o repositório de planetas (PlanetRepository) consegue salvar e recuperar corretamente um planeta no banco de dados. Esse teste utiliza o Spring Boot e a anotação @DataJpaTest, que configura automaticamente um ambiente de teste com JPA e um banco de dados em memória.

Estrutura do Teste

Aqui está a estrutura básica do teste de integração:

package br.com.starwars.domain;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;

import static br.com.starwars.common.PlanetConstants.PLANET;
import static org.assertj.core.api.Assertions.assertThat;

@DataJpaTest
class PlanetRepositoryTest {

    @Autowired
    PlanetRepository repository;

    @Autowired
    TestEntityManager entityManager;

    @Test
    @DisplayName("Create Planet with valid data return Planet")
    void createPlanet_WithValidData_ReturnPlanet() {
        var savedPlanet = repository.save(PLANET);

        // sut: system under test (sistema em teste)
        var sut = entityManager.find(Planet.class, savedPlanet.getId());

        assertThat(sut).isNotNull();
        assertThat(sut.getName()).isEqualTo(PLANET.getName());
        assertThat(sut.getClimate()).isEqualTo(PLANET.getClimate());
        assertThat(sut.getTerrain()).isEqualTo(PLANET.getTerrain());
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código

1. Anotação @DataJpaTest:

  • A anotação @DataJpaTest é usada para configurar um ambiente de teste focado em JPA. Ela configura automaticamente um banco de dados em memória e escaneia apenas os componentes relacionados à persistência de dados, como repositórios.

2. Injeção de Dependências:

  • O repositório PlanetRepository e o TestEntityManager são injetados automaticamente pelo Spring. O TestEntityManager é uma ferramenta útil para interagir diretamente com o banco de dados durante os testes.

3. Teste createPlanet_WithValidData_ReturnPlanet():

  • Este teste verifica se o repositório consegue salvar um planeta com dados válidos e, em seguida, recuperá-lo corretamente do banco de dados.
  • O planeta é salvo usando o método save() do repositório.
  • O TestEntityManager é usado para buscar o planeta salvo diretamente do banco de dados, garantindo que ele foi persistido corretamente.
  • O teste então verifica se o planeta recuperado não é nulo e se seus atributos (nome, clima e terreno) correspondem aos valores esperados.

Elevação da Pirâmide de Testes

A pirâmide de testes é um conceito que sugere que a maior parte dos testes deve ser composta por testes unitários, seguidos por testes de integração e, por fim, testes de ponta a ponta (end-to-end). Testes de integração, como o PlanetRepositoryTest, são mais lentos e complexos do que testes unitários, pois envolvem a interação com componentes externos, como o banco de dados. No entanto, eles são essenciais para garantir que as diferentes partes do sistema funcionem corretamente quando integradas.

Neste exemplo, o teste de integração está focado na camada de persistência de dados, garantindo que o repositório funcione corretamente com o banco de dados. Ele complementa os testes unitários, que testam o comportamento isolado de classes e métodos, elevando a pirâmide de testes ao garantir que a integração entre o repositório e o banco de dados está funcionando conforme o esperado.

Extra:

Image description

Conclusão

O teste de integração PlanetRepositoryTest é uma parte importante do processo de desenvolvimento, pois garante que o repositório de planetas funcione corretamente com o banco de dados. Ao usar o Spring Boot e a anotação @DataJpaTest, podemos configurar um ambiente de teste eficiente e verificar se as operações de persistência estão funcionando conforme o esperado. Esse tipo de teste é essencial para garantir a qualidade e a confiabilidade da aplicação, especialmente em sistemas que dependem de interações com bancos de dados.

#Desenvolvimento #Programação #Tecnologia #Inovação #Código #DevLife #StackSpot #Java #TestesAutomatizados #Desenvolvedor #TechLife #Software

Top comments (0)