Når du skriver en enhetstestpakke, kan det være noen ikke-testrelaterte aktiviteter du må utføre. Disse aktivitetene kan ha hvilken som helst form. Du må kanskje koble til en database eller samle ressurser før du utfører en test. Etter at hvert testtilfelle er utført, må du kanskje frigjøre noen ressurser.
Å utføre noen av disse ikke-testrelaterte aktivitetene utenfor omfanget av en enhetstestklasse kan være kjedelig om ikke umulig. Den vellykkede gjennomføringen av testklassen din kan avhenge av disse aktivitetene, så JUnit gir to par merknader for å løse dette problemet.
@BeforeAll-kommentaren
En JUnit-testklasse kan ha en eller flere testmetoder. @BeforeAll-kommentaren signaliserer at en spesifikk metode skal kjøres før alle testmetodene i en testklasse. Metoden knyttet til denne merknaden kjøres bare én gang (ved starten av testen) uavhengig av antall testmetoder i testklassen.
Enhver metode som bruker @BeforeAll-kommentaren må følge noen få krav. Disse metodene må ha en ugyldig returtype, må være offentlige og må ikke være private. @BeforeAll-kommentaren er ideell for å etablere en
tilkobling til en database eller opprette en ny fil. Denne artikkelen bruker en kalkulatortestklasse for å vise hvordan du kan bruke @BeforeAll-kommentaren.Kalkulatorklassen
pakke com.app;
offentligklasseKalkulator{
offentligstatiskintlegge til(int nummer1, int num2){
komme tilbake num1 + num2;
}
offentligstatiskinttrekke fra(int nummer1, int num2){
komme tilbake num1 - num2;
}
offentligstatiskintmultiplisere(int nummer1, int num2){
komme tilbake num1 * num2;
}
offentligstatiskintdele opp(int nummer1, int num2){
komme tilbake num1 / num2;
}
}
Kalkulatortestklassen
importstatiskorg.junit.jupiter.api.Påstander.*;
importorg.junit.jupiter.api.FørAlle;
importorg.junit.jupiter.api.Test;
importorg.junit.jupiter.api.Visningsnavn;@DisplayName("Testklasse som viser hvordan bruk de førogetter merknader.")
klasseKalkulatorTest{
@Før alle
offentligstatisktomrompowerOnCalculator(){
System.out.println("Kalkulatoren er på");
}@Test
@Visningsnavn("Testmetode som legger til to heltallsverdier.")
offentligtomromtestLegg til(){
assertEquals(7, Kalkulator.legge til(3, 4));
}@Test
@Visningsnavn("Testmetode som trekker en heltallsverdi fra en annen.")
offentligtomromtest trekke fra(){
assertEquals(6, Kalkulator.trekke fra(9, 3));
}@Test
@Visningsnavn("Testmetode som multipliserer to heltallsverdier")
offentligtomromtestMultipliser(){
assertEquals(10, Kalkulator.multiplisere(5, 2));
}
@Test
@Visningsnavn("Testmetode som deler en heltallsverdi med en annen")
offentligtomromtestDel(){
assertEquals(2, Kalkulator.dele opp(4, 2));
}
}
I denne klassen fungerer @BeforeAll-kommentaren med powerOnCalculator()-metoden, som skriver ut "Kalkulatoren er på" før en eventuell testkjøring. En vellykket testkjøring skriver ut følgende testrapport:
Som du kan se, vises ikke metoden knyttet til @BeforeAll-kommentaren i testrapporten. Men hvis det er en feil i @BeforeAll-kommentarmetoden, vil testrapportresultatene indikere dette med en feil.
@BeforeEach-kommentaren
I likhet med @BeforeAll-kommentarmetoden vil ikke @BeforeEach-kommentarmetoden vises i testrapporten. Den kommenterte @BeforeEach-metoden kjøres før hver testmetode i en testklasse. Så hvis en testklasse inneholder to testmetoder, vil @BeforeEach-kommentaren kjøres to ganger.
importstatiskorg.junit.jupiter.api.Påstander.*;
importorg.junit.jupiter.api.FørAlle;
importorg.junit.jupiter.api.Før hver;
importorg.junit.jupiter.api.Test;
@DisplayName("Testklasse som viser hvordan bruk de førogetter merknader.")
klasseKalkulatorTest{
@Før alle
offentligstatisktomrompowerOnCalculator(){
System.out.println("Kalkulatoren er på");
}
@BeforeEach
offentligtomromklarkalkulator(){
System.out.println("Kalkulatoren er klar");
}
@Test
@Visningsnavn("Testmetode som legger til to heltallsverdier.")
offentligtomromtestLegg til(){
assertEquals(7, Kalkulator.legge til(3, 4));
}
@Test
@Visningsnavn("Testmetode som trekker en heltallsverdi fra en annen.")
offentligtomromtest trekke fra(){
assertEquals(6, Kalkulator.trekke fra(9, 3));
}
@Test
@Visningsnavn("Testmetode som multipliserer to heltallsverdier")
offentligtomromtestMultipliser(){
assertEquals(10, Kalkulator.multiplisere(5, 2));
}
@Test
@Visningsnavn("Testmetode som deler en heltallsverdi med en annen")
offentligtomromtestDel(){
assertEquals(2, Kalkulator.dele opp(4, 2));
}
}
Å legge til @BeforeEach-kommentaren til CalculatorTest-klassen produserer følgende utdata:
Metoden knyttet til @BeforeEach-kommentaren kjøres fire ganger, én gang før hver testmetode. Du bør merke deg at @BeforeEach-metoden ikke er statisk, har en ugyldig returtype og ikke er privat, da dette er obligatoriske krav. Det er også viktig å merke seg at metoden knyttet til @BeforeEach-kommentaren kjører etter @BeforeAll-metoden.
@AfterAll-kommentaren
En metode med @AfterAll-kommentaren vil kjøres etter at alle testmetodene i testklassen er ferdige. @AfterAll-kommentaren er ideell for grunnleggende filoperasjoner, som å lukke en fil eller koble fra en database. @AfterAll-kommentaren er motstykket til @BeforeAll-kommentaren. I likhet med @BeforeAll-kommentaren, må @AfterAll-kommentaren være statisk, må returnere ugyldig, og mye ikke være privat.
@Tross alt
offentligstatisktomrompowerOff-kalkulator(){
System.out.println("Kalkulatoren er av");
}
Ved å legge til @AfterAll-kommentarmetoden til den eksisterende CalculatorTest-klassen skrives følgende ut til konsollen:
Merk at powerOffCalculator()-metoden, som bruker @AfterAll-kommentaren, skrives ut på slutten av testklassen, etter at alle testmetodene er utført.
@AfterEach-kommentaren
@AfterEach-kommentaren er motstykket til @BeforeEach-kommentaren. De har de samme obligatoriske bestemmelsene, som er litt forskjellige fra @BeforeAll- og @AfterAll-kommentarene. Det som skiller @AfterEach-kommentaren fra @BeforeEach-kommentaren (annet enn navnene deres) er at @AfterEach-metoden kjøres etter hver testmetode.
@AfterEach
offentligtomromreturner resultater(){
System.out.println("Resultatene er klare");
}
Ved å kjøre CalculatorTest-klassen skrives følgende ut til konsollen:
Utdataene viser at metoden knyttet til @AfterEach-kommentaren (returnResults) skrives ut fire ganger. Hver kjøring av returnResults()-metoden skjer bare etter kjøringen av hver enhetstest. Dette er tydelig ved det faktum at returnResults()-metodens utdata vises etter hver utgang fra metoden knyttet til @BeforeEach-kommentaren.
Polsk testsuitene dine ved å bruke merknader
JUnit lar deg håndtere ikke-testrelaterte prosesser ved å bruke før- og etterparnoteringene. Disse fire merknadene tilhører en liste over flere andre merknader som gir verdi til testene dine. En annen av JUnits merknader er @DisplayName.
De to kodeeksemplene som viser hele CalculatorTest-klassen bruker @DisplayName-kommentaren. @DisplayName-kommentaren hjelper deg med å lage mer meningsfulle navn for testklassene og testmetodene dine.