Bancos de Dados Incorporados para Testes
Configure e utilize bancos de dados em memória ou incorporados para realizar testes de integração rápidos e isolados.
Bancos de Dados Incorporados para Testes é uma aula grátis de Testing Mastery: JUnit, Mockito & Integration Tests no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Testing Mastery: JUnit, Mockito & Integration Tests, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Testing Mastery: JUnit, Mockito & Integration Tests inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
Embedded DBs for Tests
When writing integration tests for Spring Boot applications, especially those interacting with a database, you need a database instance for your tests to run against.
Embedded databases provide a lightweight, in-memory solution that's perfect for this scenario.
Why Use Embedded DBs?
Embedded databases offer several key benefits for testing:
- Isolation: Each test run gets a clean, fresh database, preventing side effects.
- Speed: Being in-memory, they are incredibly fast, reducing test execution time.
- Simplicity: No need for external database servers or complex setup.
- Repeatability: Tests are consistent because they always start with the same data state.
H2 & HSQLDB Options
Two popular choices for embedded databases in Java applications are H2 Database and HSQLDB.
- H2: A fast, open-source, JDBC-compliant in-memory database. It's widely used with Spring Boot.
- HSQLDB: Another lightweight, relational database written in Java.
We'll focus on H2 as it's a common default in Spring Boot.
Adding H2 Dependency
To use H2 in your Spring Boot project, you typically add it as a test scope dependency in your pom.xml (for Maven) or build.gradle (for Gradle).
This ensures it's only available during testing.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>Spring Boot Auto-Config
One of Spring Boot's magic tricks is auto-configuration. When it detects H2 on the classpath during tests, it automatically configures an in-memory H2 database for you.
You often don't need to specify a database URL in application.properties for tests, making setup trivial!
User Entity & Repository
Let's consider a simple User entity and a UserRepository. We want to test if our repository correctly saves and retrieves users.
These are standard JPA components.
// User.java
package com.coddykit.demo;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
public User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
}
// Getters and Setters
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
// UserRepository.java
package com.coddykit.demo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByName(String name);
}@DataJpaTest with H2
Spring Boot provides @DataJpaTest specifically for testing JPA components. It auto-configures an in-memory database (like H2 if present) and an EntityManager.
It also rolls back transactions after each test, ensuring a clean state.
UserRepository Test Example
Here's how you might write an integration test for our UserRepository using H2 and @DataJpaTest:
package com.coddykit.demo;
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 org.assertj.core.api.Assertions.assertThat;
@DataJpaTest
class UserRepositoryTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private UserRepository userRepository;
@Test
void whenFindByName_thenReturnUser() {
// given
User alice = new User("Alice", "alice@example.com");
entityManager.persist(alice);
entityManager.flush();
// when
User found = userRepository.findByName(alice.getName());
// then
assertThat(found.getName()).isEqualTo(alice.getName());
assertThat(found.getEmail()).isEqualTo(alice.getEmail());
}
@Test
void whenInvalidName_thenReturnNull() {
// when
User found = userRepository.findByName("InvalidName");
// then
assertThat(found).isNull();
}
}Schema & Data Initialization
For more complex scenarios, you might need to pre-populate your in-memory database with a schema or initial data.
- Place
schema.sqlinsrc/test/resourcesfor DDL (Data Definition Language). - Place
data.sqlinsrc/test/resourcesfor DML (Data Manipulation Language).
Spring Boot will automatically pick these up for your tests.
Quick Check
Which of the following is NOT a primary benefit of using an embedded database like H2 for Spring Boot integration tests?
Recap & Next Steps
We've explored how embedded databases like H2 are invaluable for fast and isolated Spring Boot integration tests.
- They offer speed, isolation, and simplicity.
- Spring Boot auto-configures them with minimal effort.
@DataJpaTestsimplifies testing JPA repositories with these databases.- You can initialize schemas and data using
schema.sqlanddata.sql.
Next, you might explore testing RESTful APIs with MockMvc!
Perguntas Frequentes
A aula “Bancos de Dados Incorporados para Testes” é grátis?
Sim — o texto completo de “Bancos de Dados Incorporados para Testes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Testing Mastery: JUnit, Mockito & Integration Tests, atualize para CoddyKit PRO. O curso de Testing Mastery: JUnit, Mockito & Integration Tests inclui 4 aulas no total.
O que vou aprender em “Bancos de Dados Incorporados para Testes”?
Configure e utilize bancos de dados em memória ou incorporados para realizar testes de integração rápidos e isolados. Você pratica Testing Mastery: JUnit, Mockito & Integration Tests com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Testing Mastery: JUnit, Mockito & Integration Tests?
Nenhuma experiência prévia é necessária. Testing Mastery: JUnit, Mockito & Integration Tests no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Bancos de Dados Incorporados para Testes”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Testing Mastery: JUnit, Mockito & Integration Tests?
Sim. Cada aula de Testing Mastery: JUnit, Mockito & Integration Tests inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Estrutura de Contexto de Testes do Spring
- Testando APIs RESTful
- Bancos de Dados Incorporados para Testes
- Testando camadas web com @WebMvcTest e MockMvc