Innebygde databaser for testing
Konfigurer og bruk minnebaserte eller innebygde databaser for rask og isolert integrasjonstesting.
Innebygde databaser for testing er en gratis leksjon i Testing i praksis: JUnit, Mockito og integrasjonstester på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Testing i praksis: JUnit, Mockito og integrasjonstester, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Testing i praksis: JUnit, Mockito og integrasjonstester inneholder totalt 4 leksjoner.
Innebygde databaser for tester
Når De skriver integrasjonstester for Spring Boot-applikasjoner, særlig tester som samhandler med en database, trenger De en databaseinstans som testene kan kjøre mot.
Innebygde databaser tilbyr en lettvektsløsning i minnet som passer perfekt til dette scenarioet.
Hvorfor bruke innebygde databaser?
Innebygde databaser gir flere viktige fordeler ved testing:
- Isolasjon: Hver testkjøring får en ren og ny database, noe som hindrer bieffekter.
- Hastighet: Siden de ligger i minnet, er de svært raske og reduserer testkjøringstiden.
- Enkelhet: Det er ikke nødvendig med eksterne databaseservere eller komplisert oppsett.
- Repeterbarhet: Testene blir konsistente fordi de alltid starter med samme datatilstand.
Alternativer for H2 og HSQLDB
To populære valg for innebygde databaser i Java-applikasjoner er H2 Database og HSQLDB.
- H2: En rask, åpen kildekode-basert, JDBC-kompatibel database i minnet. Den brukes mye sammen med Spring Boot.
- HSQLDB: En annen lettvekts relasjonsdatabase skrevet i Java.
Vi fokuserer på H2, siden den er et vanlig standardvalg i Spring Boot.
Legge til H2-avhengigheten
For å bruke H2 i Spring Boot-prosjektet Deres legger De vanligvis til H2 som en avhengighet med test-omfang i pom.xml (for Maven) eller build.gradle (for Gradle).
Dette sikrer at den bare er tilgjengelig under testing.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>Automatisk konfigurasjon i Spring Boot
Et av Spring Boots magiske triks er automatisk konfigurasjon. Når Spring Boot oppdager H2 på klassestien under tester, konfigurerer det automatisk en H2-database i minnet for Dem.
De trenger ofte ikke å angi en database-URL i application.properties for tester, noe som gjør oppsettet svært enkelt!
User-entitet og repository
La oss se på en enkel User-entitet og et UserRepository. Vi ønsker å teste om repository-et lagrer og henter brukere riktig.
Dette er standard JPA-komponenter.
// 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 med H2
Spring Boot tilbyr @DataJpaTest spesielt for testing av JPA-komponenter. Den konfigurerer automatisk en database i minnet, for eksempel H2 hvis den finnes, og en EntityManager.
Den ruller også tilbake transaksjoner etter hver test, slik at tilstanden forblir ren.
Eksempel på UserRepository-test
Slik kan De skrive en integrasjonstest for UserRepository ved hjelp av H2 og @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();
}
}Initialisering av skjema og data
I mer komplekse scenarioer kan De måtte forhåndsfylle databasen i minnet med et skjema eller startdata.
- Plasser
schema.sqlisrc/test/resourcesfor DDL (Data Definition Language). - Plasser
data.sqlisrc/test/resourcesfor DML (Data Manipulation Language).
Spring Boot finner og bruker disse automatisk i testene Deres.
Rask sjekk
Hvilket av følgende er IKKE en hovedfordel ved å bruke en innebygd database som H2 i Spring Boot-integrasjonstester?
Oppsummering og neste steg
Vi har utforsket hvordan innebygde databaser som H2 er svært nyttige for raske og isolerte Spring Boot-integrasjonstester.
- De gir hastighet, isolasjon og enkelhet.
- Spring Boot konfigurerer dem automatisk med minimal innsats.
@DataJpaTestforenkler testing av JPA-repositories med disse databasene.- De kan initialisere skjemaer og data ved hjelp av
schema.sqlogdata.sql.
Deretter kan De utforske testing av RESTful-API-er med MockMvc!
Lær deg Testing i praksis: JUnit, Mockito og integrasjonstester med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Innebygde databaser for testing» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Testing i praksis: JUnit, Mockito og integrasjonstester, inkludert «Innebygde databaser for testing», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Testing i praksis: JUnit, Mockito og integrasjonstester inneholder totalt 4 leksjoner.
Hva lærer jeg i «Innebygde databaser for testing»?
Konfigurer og bruk minnebaserte eller innebygde databaser for rask og isolert integrasjonstesting. Du øver på Testing i praksis: JUnit, Mockito og integrasjonstester med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Testing i praksis: JUnit, Mockito og integrasjonstester?
Ingen tidligere erfaring er nødvendig. Testing i praksis: JUnit, Mockito og integrasjonstester på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Innebygde databaser for testing»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Testing i praksis: JUnit, Mockito og integrasjonstester-leksjonen?
Ja. Alle Testing i praksis: JUnit, Mockito og integrasjonstester-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Spring Test Context Framework
- Testing av RESTful-API-er
- Innebygde databaser for testing
- Testing av web-lag med @WebMvcTest og MockMvc