En velskrevet testpakke vil have flere tests for en bestemt funktion. Ved at gruppere relaterede funktioner kan du udtrykke forholdet mellem flere grupper af tests. En af de største fordele ved at gruppere enhedstestklasser er, at det kan reducere mængden af ​​testkode, du skriver, da grupperede test deler ressourcer.

JUnit 5 giver dig mulighed for at oprette indlejrede test ved hjælp af @Nested-annotationen. I denne artikel lærer du, hvad @Nested-annotationen er, og hvordan du bruger den.

Hvad er en indlejret test?

JUnits @Nested-annotation signalerer, at den klasse, den forbinder med, er en indre klasse, som er medlem af en anden klasse. En indlejret test er en testklasse, der indeholder @Nested-annotationen, da det betyder, at der er en (eller flere) indre klasse i en testklasse på øverste niveau. En indlejret klasse kan vises i en klasse på øverste niveau eller i en klasse, der også er indlejret.

Oprettelse af Java-klasser til test

En indlejret testklasse arver alle funktionerne i sin overordnede klasse. Derfor er det bedste tidspunkt at oprette en indlejret test, når der er en logisk gruppering af testcases, eller når en enkelt testcase har forskellige funktioner. Et godt eksempel på dette er, når du vil teste en klasses evne til at skabe nyttige objekter. Et andet eksempel er, når en enkelt metode har to eller flere formål.

instagram viewer

Her er et eksempel på en klasse, som du kan bruge i en detailapplikation, der viser, hvordan du kan oprette en indlejret test.

offentligklasseKunde{
beskyttetint Kunde ID;
beskyttet Streng kundenavn;
beskyttet String kundekode;

// standard konstruktør
offentligKunde(){
det her.customerId = 0;
det her.customerName = "";
det her.customerCode ="";
}

// primær konstruktør
offentligKunde(int kunde-id, streng kundenavn, streng kundekode){
det her.customerId = kunde-id;
det her.kundenavn = kundenavn;
det her.customerCode = kundekode;
}

// kopi konstruktør
offentligKunde(Kundekunde){
det her.customerId = kunde.kundeId;
det her.kundenavn = kunde.kundenavn;
det her.customerCode = kunde.kundekode;
}

// gettere og sættere
offentligintget kunde-id(){
Vend tilbage Kunde ID;
}

offentligugyldigsæt KundeId(int Kunde ID){
det her.customerId = kunde-id;
}

offentlig Snor få Kundenavn(){
Vend tilbage Kundenavn;
}

offentligugyldigsæt Kundenavn(streng kundenavn){
det her.kundenavn = kundenavn;
}

offentlig Snor få kundekode(){
Vend tilbage kundekode;
}

offentligugyldigsæt kundekode(streng kundekode){
det her.customerCode = kundekode;
}

// bestemme en kunderabatprocent baseret på kundetype
offentligdobbeltkundetype(streng kundekode){
dobbelt rabat = 0;

hvis (customerCode.toLowerCase().equals("pre")) {
rabat = 0.10;
} andethvis (customerCode.toLowerCase().equals("gen")) {
rabat = 0.02;
} andethvis (customerCode.toLowerCase().equals("ny")) {
rabat = 0.05;
}

Vend tilbage rabat;
}

// bestemme en kundes totaltotal baseret på kundetype
offentligdobbeltgrandTotal(dobbelt Total){
dobbelt rabat = kundetype (kundekode);
dobbelt rabatProcent = i alt * rabat;
dobbelt finalTotal = total - rabatProcent;
Vend tilbage endeligTotal;
}
}

Denne kundeklasse indeholder alle komponenterne i en Java-klasse, komplet med to metoder.

Oprettelse af en indlejret test med JUnit 5

Kundeklassen har flere konstruktører, gettere og sættere og to metoder. Du kan oprette en indlejret klasse (inden for kundetestklassen), der opretter et nyt kundeobjekt og tester alle dets komponenter.

importerestatiskorg.junit.jupiter.api.Påstande.*;

importereorg.junit.jupiter.api.Visningsnavn;
importereorg.junit.jupiter.api.Indlejret;
importereorg.junit.jupiter.api.Prøve;

@DisplayName("Kundetestklasse, der viser, hvordan man skabIndlejret prøver.")
klasseKundetest{
beskyttetint kunde-id = 301;
beskyttet streng kundenavn = "Mike Wilson";
beskyttet streng kundekode = "Pre";
beskyttetdobbelt i alt = 600;

@Nested
@Visningsnavn("Customer Builder Nested Test Class Inden for en Top-Level Test Class")
klasseCustomerBuilderTest{
Kundekunde = ny Kunde (kunde-id, kundenavn, kundekode);
dobbelt grandTotal = kunde.grandTotal (total);

@Prøve
@Visningsnavn("Test af kunden's Klassekonstruktører, gettere og sættere og metoder.")
ugyldigkundebygger(){
assertAll(() -> {
assertEquals(Kunde ID, kunde.getCustomerId());
assertEquals(Kundenavn, kunde.getCustomerName());
assertEquals(kundekode, kunde.get kundekode());
assertEquals(0.10, kunde.customerType(kundekode));
assertEquals (540, grandTotal);
});
}
}
}

CustomerTest-klassen er testklassen på øverste niveau til en indlejret CustomerBuilderTest-klasse. CustomerBuilderTest opretter et nyt kundeobjekt og tester dets komponenter vha påstandsprøver.

Udførelse af CustomerTest-testklassen giver følgende vellykkede testresultater:

Navnene på testklasserne og testmetoden er beskrivende og omfattende, takket være @DisplayName Annotation.

At vide, hvordan man tester software er afgørende

Teknologi er et vigtigt aspekt af hverdagen for de fleste mennesker. Indsatsen for at skabe software, der gør præcis, hvad den skal, har aldrig været højere.

En selvkørende bil, der fejlberegner sin nærhed til et andet objekt, kan forårsage en større ulykke. Derfor er du nødt til at teste din applikation på alle stadier af dens udvikling.