Mestrer test: JUnit, Mockito og integrationstest · Lektion

Embedded-databaser til tests

Konfigurér og anvend in-memory- eller embedded-databaser til hurtig og isoleret integrationstestning.

Lektion 3 af 411 trin

Embedded-databaser til tests er en gratis Mestrer test: JUnit, Mockito og integrationstest-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Mestrer test: JUnit, Mockito og integrationstest, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Mestrer test: JUnit, Mockito og integrationstest-kurset indeholder 4 lektioner i alt.

Indlejrede databaser til test

Når du skriver integrationstest til Spring Boot-applikationer, især applikationer der interagerer med en database, har du brug for en databaseinstans, som dine test kan køre mod.

Indlejrede databaser leverer en letvægtsløsning i hukommelsen, der er perfekt til dette scenarie.

Hvorfor bruge indlejrede databaser?

Indlejrede databaser giver flere vigtige fordele ved test:

  • Isolation: Hver testkørsel får en ren og ny database, så bivirkninger undgås.
  • Hastighed: Da de ligger i hukommelsen, er de ekstremt hurtige og reducerer testkørselstiden.
  • Enkelhed: Der er ikke brug for eksterne databaseservere eller kompleks opsætning.
  • Gentagelighed: Testene er ensartede, fordi de altid starter med den samme datatilstand.

Valgmulighederne H2 og HSQLDB

To populære valg til indlejrede databaser i Java-applikationer er H2 Database og HSQLDB.

  • H2: En hurtig open source-database i hukommelsen, der er JDBC-kompatibel. Den bruges bredt sammen med Spring Boot.
  • HSQLDB: Endnu en letvægtsrelationsdatabase skrevet i Java.

Vi fokuserer på H2, fordi den ofte er standard i Spring Boot.

Tilføjelse af H2-afhængigheden

Hvis du vil bruge H2 i dit Spring Boot-projekt, tilføjer du den typisk som en afhængighed med test-scope i din pom.xml (til Maven) eller build.gradle (til Gradle).

Det sikrer, at den kun er tilgængelig under test.

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>test</scope>
</dependency>

Spring Boot-autokonfiguration

Et af Spring Boots magiske tricks er autokonfiguration. Når Spring Boot registrerer H2 på classpath under test, konfigurerer den automatisk en H2-database i hukommelsen for dig.

Du behøver ofte ikke angive en database-URL i application.properties til test, hvilket gør opsætningen enkel!

User-entitet og repository

Lad os se på en simpel User-entitet og et UserRepository. Vi vil teste, om vores repository gemmer og henter brugere korrekt.

Det er standardkomponenter i JPA.

// 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 leverer @DataJpaTest specifikt til test af JPA-komponenter. Den autokonfigurerer en database i hukommelsen (f.eks. H2, hvis den er tilgængelig) og en EntityManager.

Den ruller også transaktioner tilbage efter hver test, så tilstanden forbliver ren.

Eksempel på UserRepository-test

Sådan kan du skrive en integrationstest af vores UserRepository ved hjælp af 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 af skema og data

I mere komplekse scenarier kan du have brug for at udfylde din database i hukommelsen på forhånd med et skema eller indledende data.

  • Placér schema.sql i src/test/resources til DDL (Data Definition Language).
  • Placér data.sql i src/test/resources til DML (Data Manipulation Language).

Spring Boot finder automatisk disse til dine test.

Hurtigt tjek

Hvilken af følgende er IKKE en primær fordel ved at bruge en indlejret database som H2 til Spring Boot-integrationstest?

Opsummering og næste trin

Vi har undersøgt, hvordan indlejrede databaser som H2 er uvurderlige til hurtige og isolerede Spring Boot-integrationstest.

  • De giver hastighed, isolation og enkelhed.
  • Spring Boot autokonfigurerer dem med minimal indsats.
  • @DataJpaTest gør det enklere at teste JPA-repositories med disse databaser.
  • Du kan initialisere skemaer og data ved hjælp af schema.sql og data.sql.

Dernæst kan du udforske test af RESTful API'er med MockMvc!

Gratis at komme i gang

Lær Mestrer test: JUnit, Mockito og integrationstest med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Embedded-databaser til tests” gratis?

Ja — alle 3 lektioner i læringssporet Mestrer test: JUnit, Mockito og integrationstest, inklusive “Embedded-databaser til tests”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Mestrer test: JUnit, Mockito og integrationstest-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Embedded-databaser til tests”?

Konfigurér og anvend in-memory- eller embedded-databaser til hurtig og isoleret integrationstestning. Du øver dig i Mestrer test: JUnit, Mockito og integrationstest med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Mestrer test: JUnit, Mockito og integrationstest?

Der kræves ingen tidligere erfaring. Mestrer test: JUnit, Mockito og integrationstest på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Embedded-databaser til tests”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Mestrer test: JUnit, Mockito og integrationstest-lektion?

Ja. Alle Mestrer test: JUnit, Mockito og integrationstest-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Spring Test Context Framework
  2. Test af RESTful API'er
  3. Embedded-databaser til tests
  4. Test af web-lag med @WebMvcTest og MockMvc
← Tilbage til Mestrer test: JUnit, Mockito og integrationstest