Når du skriver en enhedstestpakke, kan der være nogle ikke-testrelaterede aktiviteter, du skal udføre. Disse aktiviteter kan antage enhver form. Du skal muligvis oprette forbindelse til en database eller samle ressourcer, før du udfører en test. Efter hver testcase er udført, skal du muligvis frigive nogle ressourcer.

At udføre nogen af ​​disse ikke-testrelaterede aktiviteter uden for rammerne af en enhedstestklasse kan være kedeligt, hvis ikke umuligt. Den vellykkede udførelse af din testklasse kan afhænge af disse aktiviteter, så JUnit giver to par anmærkninger til at løse dette problem.

@BeforeAll-annotationen

En JUnit-testklasse kan have en eller flere testmetoder. @BeforeAll-annotationen signalerer, at en specifik metode skal udføres før alle testmetoderne i en testklasse. Metoden forbundet med denne annotation udføres kun én gang (ved starten af ​​testen) uanset antallet af testmetoder i testklassen.

Enhver metode, der bruger @BeforeAll-annotationen, skal følge nogle få bestemmelser. Disse metoder skal have en ugyldig returtype, skal være offentlige og må ikke være private. @BeforeAll-annotationen er ideel til at etablere en

forbindelse til en database eller oprette en ny fil. Denne artikel bruger en lommeregnertestklasse til at vise, hvordan du kan bruge @BeforeAll-annotationen.

Lommeregner-klassen

pakke com.app;
offentligklasseLommeregner{
offentligstatiskinttilføje(int nummer 1, int nummer 2){
Vend tilbage num1 + num2;
}
offentligstatiskinttrække fra(int nummer 1, int nummer 2){
Vend tilbage num1 - num2;
}
offentligstatiskintformere sig(int nummer 1, int nummer 2){
Vend tilbage num1 * num2;
}
offentligstatiskintdele(int nummer 1, int nummer 2){
Vend tilbage num1 / num2;
}
}

CalculatorTest-klassen

importerestatiskorg.junit.jupiter.api.Påstande.*;
importereorg.junit.jupiter.api.FørAlle;
importereorg.junit.jupiter.api.Prøve;
importereorg.junit.jupiter.api.Visningsnavn;

@DisplayName("Test klasse, der viser, hvordan man brug det Førogefter anmærkninger.")
klasseLommeregnerTest{
@FørAlle
offentligstatiskugyldigpowerOn Calculator(){
System.out.println("Lommeregneren er tændt");
}

@Prøve
@Visningsnavn("Testmetode, der tilføjer to heltalsværdier.")
offentligugyldigtestTilføj(){
assertEquals(7, Lommeregner.tilføje(3, 4));
}

@Prøve
@Visningsnavn("Testmetode, der trækker en heltalværdi fra en anden.")
offentligugyldigtest trække fra(){
assertEquals(6, Lommeregner.trække fra(9, 3));
}

@Prøve
@Visningsnavn("Testmetode, der multiplicerer to heltalsværdier")
offentligugyldigtestMultiplicer(){
assertEquals(10, Lommeregner.formere sig(5, 2));
}

@Prøve
@Visningsnavn("Testmetode, der dividerer en heltalsværdi med en anden")
offentligugyldigtestOpdel(){
assertEquals(2, Lommeregner.dele(4, 2));
}
}

I denne klasse fungerer @BeforeAll-annotationen med powerOnCalculator()-metoden, som udskriver "Lommeregneren er tændt" før enhver testkørsel. Den vellykkede testudførelse udskriver følgende testrapport:

Som du kan se, vises metoden forbundet med @BeforeAll-annotationen ikke i testrapporten. Men hvis der er en fejl i @BeforeAll annotationsmetoden, vil testrapportens resultater angive dette med en fejl.

@BeforeEach-annotationen

Ligesom @BeforeAll annoterede metode, vil @BeforeEach annoterede metode ikke vises i testrapporten. @BeforeEach annoterede metode udføres før hver testmetode i en testklasse. Så hvis en testklasse indeholder to testmetoder, vil @BeforeEach-annotationen udføres to gange.

importerestatiskorg.junit.jupiter.api.Påstande.*;
importereorg.junit.jupiter.api.FørAlle;
importereorg.junit.jupiter.api.FørHver;
importereorg.junit.jupiter.api.Prøve;
@DisplayName("Test klasse, der viser, hvordan man brug det Førogefter anmærkninger.")
klasseLommeregnerTest{
@FørAlle
offentligstatiskugyldigpowerOn Calculator(){
System.out.println("Lommeregneren er tændt");
}
@BeforeEach
offentligugyldigclear Calculator(){
System.out.println("Lommeregneren er klar");
}
@Prøve
@Visningsnavn("Testmetode, der tilføjer to heltalsværdier.")
offentligugyldigtestTilføj(){
assertEquals(7, Lommeregner.tilføje(3, 4));
}
@Prøve
@Visningsnavn("Testmetode, der trækker en heltalværdi fra en anden.")
offentligugyldigtest trække fra(){
assertEquals(6, Lommeregner.trække fra(9, 3));
}
@Prøve
@Visningsnavn("Testmetode, der multiplicerer to heltalsværdier")
offentligugyldigtestMultiplicer(){
assertEquals(10, Lommeregner.formere sig(5, 2));
}
@Prøve
@Visningsnavn("Testmetode, der dividerer en heltalsværdi med en anden")
offentligugyldigtestOpdel(){
assertEquals(2, Lommeregner.dele(4, 2));
}
}

Tilføjelse af @BeforeEach-annotationen til CalculatorTest-klassen producerer følgende output:

Metoden, der er knyttet til @BeforeEach-annotationen, udføres fire gange, én gang før hver testmetode. Du skal bemærke, at @BeforeEach-metoden ikke er statisk, har en ugyldig returtype og ikke er privat, da disse er obligatoriske betingelser. Det er også vigtigt at bemærke, at den metode, der er knyttet til @BeforeEach-annotationen, kører efter @BeforeAll-metoden.

@AfterAll-annotationen

En metode med @AfterAll-annotationen udføres, når alle testmetoderne i testklassen har fuldført deres udførelse. @AfterAll-annotationen er ideel til grundlæggende filhandlinger, som at lukke en fil eller afbryde forbindelsen til en database. @AfterAll-annotationen er modstykket til @BeforeAll-annoteringen. Ligesom @BeforeAll-annotationen skal @AfterAll-annotationen være statisk, skal returnere ugyldig og meget ikke være privat.

@Trods alt
offentligstatiskugyldigpowerOff Calculator(){
System.out.println("Lommeregneren er slukket");
}

Tilføjelse af @AfterAll-annoterede metode til den eksisterende CalculatorTest-klasse udskriver følgende output til konsollen:

Bemærk, at powerOffCalculator()-metoden, som bruger @AfterAll-annotationen, udskrives i slutningen af ​​testklassen, efter at alle testmetoderne er udført.

@AfterEach-annotationen

@AfterEach-annotationen er modstykket til @BeforeEach-annotationen. De har de samme obligatoriske bestemmelser, som er lidt forskellige fra @BeforeAll- og @AfterAll-annoteringerne. Det, der adskiller @AfterEach-annotationen fra @BeforeEach-annotationen (bortset fra deres navne) er, at @AfterEach-metoden kører efter hver testmetode.

@AfterEach
offentligugyldigreturner Resultater(){
System.out.println("Resultaterne er klar");
}

Udførelse af CalculatorTest-klassen udskriver følgende output til konsollen:

Outputtet viser, at metoden forbundet med @AfterEach-annotationen (returnResults) udskrives fire gange. Hver udførelse af returnResults()-metoden sker kun efter udførelse af hver enhedstest. Dette fremgår af det faktum, at returnResults()-metodens output vises efter hvert output fra den metode, der er knyttet til @BeforeEach-annotationen.

Poler dine testsuiter ved hjælp af anmærkninger

JUnit giver dig mulighed for at håndtere ikke-testrelaterede processer ved at bruge før- og efterparrets annoteringer. Disse fire annoteringer hører til en liste over flere andre annoteringer, som tilføjer værdi til dine tests. En anden af ​​JUnits annoteringer er @DisplayName.

De to kodeeksempler, der viser den komplette CalculatorTest-klasse, bruger @DisplayName-annotationen. @DisplayName-annotationen hjælper dig med at skabe mere meningsfulde navne til dine testklasser og testmetoder.