Ingebouwde databases voor tests
Configureer en gebruik in-memory- of ingebouwde databases voor snelle en geïsoleerde integratietests.
Ingebouwde databases voor tests is een gratis Testen beheersen: JUnit, Mockito en integratietesten-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Testen beheersen: JUnit, Mockito en integratietesten. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Testen beheersen: JUnit, Mockito en integratietesten bevat in totaal 4 lessen.
Ingesloten databases voor tests
Wanneer je integratietests schrijft voor Spring Boot-toepassingen, vooral voor toepassingen die met een database communiceren, heb je een database-instantie nodig waartegen je tests kunnen worden uitgevoerd.
Ingesloten databases bieden hiervoor een lichtgewicht oplossing in het geheugen.
Waarom ingesloten databases gebruiken?
Ingesloten databases bieden verschillende belangrijke voordelen voor het testen:
- Isolatie: elke testrun krijgt een schone, nieuwe database, waardoor bijwerkingen worden voorkomen.
- Snelheid: omdat ze in het geheugen werken, zijn ze bijzonder snel en verkorten ze de uitvoertijd van tests.
- Eenvoud: je hebt geen externe databaseservers of complexe configuratie nodig.
- Herhaalbaarheid: tests zijn consistent omdat ze altijd met dezelfde gegevensstatus beginnen.
Opties voor H2 en HSQLDB
Twee populaire keuzes voor ingesloten databases in Java-toepassingen zijn H2 Database en HSQLDB.
- H2: een snelle, opensource database in het geheugen die JDBC ondersteunt. Deze wordt veel gebruikt met Spring Boot.
- HSQLDB: een andere lichtgewicht relationele database die in Java is geschreven.
We richten ons op H2, omdat dit een veelgebruikte standaard in Spring Boot is.
De H2-afhankelijkheid toevoegen
Om H2 in je Spring Boot-project te gebruiken, voeg je het doorgaans toe als een afhankelijkheid met test-scope in je pom.xml (voor Maven) of build.gradle (voor Gradle).
Zo zorg je ervoor dat het alleen tijdens het testen beschikbaar is.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>Automatische configuratie van Spring Boot
Een van de slimme functies van Spring Boot is automatische configuratie. Wanneer Spring Boot H2 tijdens tests op het klassenpad vindt, configureert het automatisch een H2-database in het geheugen voor je.
Vaak hoef je voor tests geen database-URL op te geven in application.properties, waardoor de configuratie heel eenvoudig wordt!
User-entiteit en repository
Laten we een eenvoudige User-entiteit en een UserRepository bekijken. We willen testen of onze repository gebruikers correct opslaat en ophaalt.
Dit zijn standaard JPA-onderdelen.
// 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 met H2
Spring Boot biedt @DataJpaTest specifiek voor het testen van JPA-onderdelen. Het configureert automatisch een database in het geheugen, zoals H2 als die aanwezig is, en een EntityManager.
Na elke test worden transacties ook teruggedraaid, zodat de toestand schoon blijft.
Voorbeeld van een UserRepository-test
Zo zou je een integratietest voor onze UserRepository kunnen schrijven met H2 en @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- en gegevensinitialisatie
Voor complexere scenario's moet je je database in het geheugen mogelijk vooraf vullen met een schema of begingegevens.
- Plaats
schema.sqlinsrc/test/resourcesvoor DDL (Data Definition Language). - Plaats
data.sqlinsrc/test/resourcesvoor DML (Data Manipulation Language).
Spring Boot neemt deze bestanden automatisch mee voor je tests.
Korte controle
Welke van de volgende opties is GEEN belangrijk voordeel van het gebruik van een ingesloten database zoals H2 voor Spring Boot-integratietests?
Samenvatting en volgende stappen
We hebben onderzocht waarom ingesloten databases zoals H2 zo waardevol zijn voor snelle en geïsoleerde Spring Boot-integratietests.
- Ze bieden snelheid, isolatie en eenvoud.
- Spring Boot configureert ze automatisch met minimale inspanning.
@DataJpaTestvereenvoudigt het testen van JPA-repositories met deze databases.- Je kunt schema's en gegevens initialiseren met
schema.sqlendata.sql.
Vervolgens kun je RESTful API's gaan testen met MockMvc!
Leer Testen beheersen: JUnit, Mockito en integratietesten met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Ingebouwde databases voor tests” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Testen beheersen: JUnit, Mockito en integratietesten, waaronder “Ingebouwde databases voor tests”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Testen beheersen: JUnit, Mockito en integratietesten bevat in totaal 4 lessen.
Wat leer ik in “Ingebouwde databases voor tests”?
Configureer en gebruik in-memory- of ingebouwde databases voor snelle en geïsoleerde integratietests. Je oefent met Testen beheersen: JUnit, Mockito en integratietesten door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Testen beheersen: JUnit, Mockito en integratietesten te beginnen?
Ervaring vooraf is niet nodig. Testen beheersen: JUnit, Mockito en integratietesten op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Ingebouwde databases voor tests”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Testen beheersen: JUnit, Mockito en integratietesten?
Ja. Elke les over Testen beheersen: JUnit, Mockito en integratietesten bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Spring Test Context Framework
- RESTful API's testen
- Ingebouwde databases voor tests
- Weblagen testen met @WebMvcTest en MockMvc