Mestrer test: JUnit, Mockito og integrationstest · Lektion

Håndtering af testdata

Udarbejd strategier til at oprette, administrere og rydde testdata op for at sikre gentagelige E2E-tests.

Lektion 3 af 411 trin

Håndtering af testdata 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.

Grundlæggende om data til E2E-test

Når du udfører End-to-End-tests (E2E-tests), er testdata afgørende. Det er de oplysninger, din applikation bruger under en test, f.eks. brugerkonti, produktoplysninger eller ordrehistorik.

Uden gode testdata bliver dine E2E-tests upålidelige. Forestil dig at teste et køb i en netbutik uden et produkt i kurven eller en registreret bruger!

Udfordringer med E2E-data

Håndtering af testdata til E2E-tests medfører nogle særlige udfordringer:

  • Kompleksitet: E2E-tests interagerer ofte med flere dele af systemet, hvilket kræver komplekse dataopsætninger.
  • Afhængigheder: Data kan afhænge af eksterne systemer eller andre moduler, hvilket gør dem svære at kontrollere.
  • Tilstand: Test kan efterlade systemet i en uventet tilstand, som påvirker efterfølgende test.
  • Oprydning: Det kan være besværligt at fjerne data efter en test, men det er afgørende for, at testene kan gentages.

Opret data via API

En almindelig strategi er at oprette testdata programmatisk ved hjælp af din applikations egne API'er (f.eks. REST API-slutpunkter). Det sikrer, at dataene gennemgår den samme valideringslogik som data fra rigtige brugere.

Prøv at køre dette eksempel, som simulerer oprettelsen af en bruger via en API:

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
  public static void main(String[] args) throws IOException, InterruptedException {
    String jsonPayload = "{\"username\": \"testuser\", \"email\": \"test@example.com\"}";
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.example.com/users"))
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
        .build();

    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println("API Call Status: " + response.statusCode());
    System.out.println("Response Body: " + response.body());
  }
}

Data med databasescripts

Til nogle E2E-tests kan det være nødvendigt at indsætte data direkte i databasen ved hjælp af SQL-scripts. Det er hurtigt, men omgår applikationens forretningslogik.

Brug denne metode med omtanke, typisk til grundlæggende data, eller når oprettelse via API er for langsom eller kompleks.

INSERT INTO users (id, username, email)
VALUES (101, 'db_user', 'db@example.com');

INSERT INTO products (id, name, price)
VALUES (201, 'Test Product A', 19.99);

Brug af testdatafabrikker

Testdatafabrikker (eller generatorer) er værktøjer eller brugerdefinerede klasser, der automatiserer oprettelsen af realistiske og varierede data. Biblioteker som Faker kan generere navne, adresser og meget mere.

Det gør det muligt at oprette forskellige testscenarier uden manuelt arbejde. Her er et enkelt fabrikkoncept:

// Imagine a UserFactory class
class User {
    String username;
    String email;
    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }
    @Override
    public String toString() {
        return "User: " + username + " (" + email + ")";
    }
}

class UserFactory {
    private static int counter = 0;
    public static User createRandomUser() {
        counter++;
        return new User("user_" + counter, "user" + counter + "@example.com");
    }
}

public class Main {
  public static void main(String[] args) {
    User user1 = UserFactory.createRandomUser();
    User user2 = UserFactory.createRandomUser();
    System.out.println(user1);
    System.out.println(user2);
  }
}

Isolér testdata

Et af de vigtigste principper er isolering af testdata. Hver test eller testsuite bør ideelt set arbejde med sit eget unikke datasæt.

Det forhindrer test i at påvirke hinanden, så de bliver mere pålidelige og lettere at fejlfinde. Delte data kan føre til ustabile test, der består eller fejler uforudsigeligt.

Data for miljøer

Testdata skal ofte være forskellige i forskellige miljøer (f.eks. udvikling, staging og produktion). Du kan have specifikke konfigurationer eller integrationer med eksterne tjenester, som kræver unikke data.

Håndtér dette ved at bruge miljøvariabler, konfigurationsfiler eller dedikerede datasæt til hvert miljø.

Afgørende dataoprydning

At oprette testdata er kun den ene halvdel; oprydning efter dem er lige så vigtigt. Når en test er kørt, bør alle data, den har oprettet, fjernes.

Hvorfor er oprydning så vigtig?

  • Sikrer, at testene rent faktisk kan gentages.
  • Forhindrer forurening af testmiljøet med data.
  • Undgår uventede bivirkninger for efterfølgende test.

Programmatisk oprydning

Ligesom du opretter data programmatisk, bør du også slette dem programmatisk. Det kan indebære at kalde et 'delete'-API-slutpunkt eller køre SQL-sætninger med DELETE.

Oprydning udføres ofte i en metode af typen @AfterEach eller @AfterAll (afhængigt af dit testframework) for at garantere, at den køres, efter testene er afsluttet.

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
  public static void main(String[] args) throws IOException, InterruptedException {
    String userIdToDelete = "testuser"; // Or an ID obtained during creation
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.example.com/users/" + userIdToDelete))
        .DELETE()
        .build();

    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println("Delete Status: " + response.statusCode());
  }
}

Quiz om testdata

Hvilke af følgende er gode fremgangsmåder til håndtering af testdata i End-to-End-tests (E2E-tests)?

Opsummering: Bliv ekspert i testdata

Du har lært, at effektiv håndtering af testdata er afgørende for stabile og gentagelige E2E-tests. Vi har gennemgået:

  • Strategier til oprettelse af data (API'er, databasescripts og fabrikker).
  • Vigtigheden af dataisolering og miljøspecifikke data.
  • Nødvendigheden af at rydde data op efter test.

Ved at anvende disse strategier kan du opbygge mere robuste og pålidelige E2E-testsuiter!

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 “Håndtering af testdata” gratis?

Ja — alle 3 lektioner i læringssporet Mestrer test: JUnit, Mockito og integrationstest, inklusive “Håndtering af testdata”, 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 “Håndtering af testdata”?

Udarbejd strategier til at oprette, administrere og rydde testdata op for at sikre gentagelige E2E-tests. 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 “Håndtering af testdata”?

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. E2E-test kontra integrationstest
  2. Oversigt over E2E-testværktøjer
  3. Håndtering af testdata
  4. Skriv pålidelige E2E-tests: Bekæmp flaky tests
← Tilbage til Mestrer test: JUnit, Mockito og integrationstest