JUnit Test Cases @Before @BeforeClass Annotation
โก Smart opsummering
JUnit er det mest anvendte enhedstestframework til Java, og dens testfixture-annotationer styrer prรฆcis, hvad der sker fรธr og efter hver testmetode kรธrer i en testklasse.
JUnit er den mest populรฆre enhed Test rammer i Java. Det anbefales udtrykkeligt til Enhedstest. JUnit krรฆver ikke en server for at teste en webapplikation, hvilket gรธr testprocessen hurtig.
JUnit framework tillader ogsรฅ hurtig og nem generering af testcases og testdata. Det org.junit Pakken bestรฅr af mange grรฆnseflader og klasser til JUnit testning, sรฅsom Test, Assert, Efter og Fรธr. Den bredere JUnit Familien bygger pรฅ de samme byggesten.
Hvad er en testfixtur?
Fรธr vi forstรฅr, hvad en testfixture er, lad os studere koden nedenfor.
Denne kode er designet til at udfรธre to testcases pรฅ en simpel fil.
public class OutputFileTest { private File output; output = new File(...); output.delete(); public void testFile1(){ //Code to verify Test Case 1 } output.delete(); output = new File(...); public void testFile2(){ //Code to verify Test Case 2 } output.delete(); }
Lidt problemer her
- Koden er ikke lรฆsbar.
- Koden er ikke nem at vedligeholde.
- Nรฅr testpakken er kompleks, kan koden indeholde logiske problemer.
Sammenlign den samme kode vha JUnit.
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
Koden er langt mere lรฆsbar og vedligeholdelsesvenlig. Ovenstรฅende kodestruktur er en testarmatur.
Et testarmatur er en kontekst, hvor en JUnit Test sag lรธber. Typisk inkluderer testarmaturer:
- Objekter eller ressourcer, der er tilgรฆngelige for enhver testcase.
- Aktiviteter, der krรฆves for at gรธre disse objekter og ressourcer tilgรฆngelige.
- Disse aktiviteter er
- tildeling (setup)
- de-allokering (rive ned).
Opsรฆtning og nedtagning
Inventar er vigtige fordi JUnit kรธrer disse hooks rundt om hver test.
- Normalt er der nogle gentagne opgaver, der skal udfรธres forud for hver testcase. Eksempel: oprette en databaseforbindelse.
- Ligeledes kan der i slutningen af โโhver testcase vรฆre nogle gentagne opgaver. Eksempel: at rydde op, nรฅr testudfรธrelsen er overstรฅet.
- JUnit indeholder annotationer, der hjรฆlper med opsรฆtning og nedtagning. Det sikrer, at ressourcer frigives, og at testsystemet er klar til den nรฆste testcase.
Disse JUnit Annotationer diskuteres nedenfor.
Opsรฆtning
@Fรธr anmรฆrkning i JUnit bruges pรฅ en metode, der indeholder Java kode, der skal kรธres fรธr hver testcase, det vil sige, den kรธres fรธr hver testudfรธrelse.
Nedbrydning (uanset dommen)
@Efter annotering bruges pรฅ en metode, der indeholder Java kode, der skal kรธres efter hver testcase. Disse metoder kรธrer, selvom der udlรธses undtagelser i testcasen eller i tilfรฆlde af pรฅstandsfejl.
Bemรฆrk:
- Det er tilladt at have et hvilket som helst antal annoteringer, der er angivet ovenfor.
- Alle de metoder, der er kommenteret med @Fรธr in JUnit vil kรธre fรธr hver testcase, men de kan kรธre i vilkรฅrlig rรฆkkefรธlge.
- Du kan arve @Before- og @After-metoder fra en superklasse. Udfรธrelsen er som fรธlger, og det er en standardudfรธrelsesproces i JUnit.
- Udfรธr JUnit @Fรธr metoder i superklassen
- Udfรธr @Before-metoderne i denne klasse
- Udfรธr en @Test-metode i denne klasse
- Udfรธr @After-metoderne i denne klasse
- Udfรธr @After metoderne i superklassen
JUnit 5-note: disse annotationer er JUnit 4 (org.junit). JUnit 5 omdรธbte dem i org.junit.jupiter.api, og JUnit 4-koden nedenfor kรธrer stadig under den gamle motor.
| JUnit 4 annotering | JUnit 5 (Jupiter) tilsvarende | Kรธrer |
|---|---|---|
| @Fรธr | @FรธrHver | Fรธr hver testmetode |
| @Efter | @EfterHver | Efter hver testmetode |
| @BeforeClass | @FรธrAlle | รn gang foran hele klassen |
| @Efter skole | @EfterAlle | En gang efter hele klassen |
| @Ignorere | @Handicappet | Springer den kommenterede test over |
Eksempel: Oprettelse af en klasse med fil som testfixture
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
I ovenstรฅende eksempel vil udfรธrelseskรฆden vรฆre som fรธlger. Diagrammet tracer รฉn opret-test-slet-cyklus pr. testmetode.
- createOutputFile()
- testFil1()
- sletOutputFile()
- createOutputFile()
- testFil2()
- sletOutputFile()
Antagelse:
testFile1() kรธrer fรธr testFile2(), hvilket ikke er garanteret.
Opsรฆtning kun รฉn gang
- Det er muligt kun at kรธre en metode รฉn gang for hele testklassen, fรธr nogen af โโtestene udfรธres, og fรธr evt. @Fรธr metoder).
- "Engangsopsรฆtning" er nyttig til at starte servere, รฅbne kommunikation og lignende arbejde. Det er tidskrรฆvende at lukke og genรฅbne ressourcer for hver test.
- Dette kan gรธres ved hjรฆlp af anmรฆrkningen @BeforeClass in JUnit.
@BeforeClass public static void Method_Name() { // class setup code here }
Metoden skal vรฆre offentligt statisk tomrum, Fordi JUnit kalder det, fรธr der findes nogen testinstans.
Rive ned รฉn gang
- Ligesom engangsopsรฆtning er der ogsรฅ en engangsoprydningsmetode tilgรฆngelig. Den kรธrer efter alle testcase-metoder og @Efter anmรฆrkninger er blevet udfรธrt.
- Det er nyttigt til at stoppeping servere og lukning af kommunikationsforbindelser.
- Dette kan gรธres ved hjรฆlp af @Efter skole anmรฆrkning.
@AfterClass public static void Method_Name() { // class cleanup code here }
JUnit Test suiter
Nรฅr faste installationer er pรฅ plads, grupperes og lanceres relaterede testklasser normalt sammen.
Hvis vi รธnsker at udfรธre flere tests i en bestemt rรฆkkefรธlge, kan det gรธres ved at kombinere alle testene รฉt sted. Dette sted kaldes en testsuite. Flere detaljer om, hvordan man udfรธrer testsuiter, og hvordan de bruges i JUnit er dรฆkket af dette tutorial.
JUnit Testlรธber
JUnit giver et vรฆrktรธj til udfรธrelse af dine testcases.
- JUnitCore klasse bruges til at udfรธre disse tests.
- En metode kaldet kรธre klasser fra org.junit.runner.JUnitCore bruges til at kรธre en eller flere testklasser.
- Returtype af denne metode er Resultat objekt (org.junit.runner.Result), som bruges til at fรฅ adgang til oplysninger om testene. Se fรธlgende kodeeksempel for mere klarhed.
public class Test { public static void main(String[] args) { Result result = JUnitCore.runClasses(CreateAndSetName.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
I ovenstรฅende kode behandles "result"-objektet for at hente fejl og succesfulde resultater fra de testcases, vi udfรธrer. Hjรฆlpefunktioner som f.eks. assertEquals hรฆve disse fejl, mens @Ignorere springer en test over.
JUnit 5-note: JUnitCore er JUnit 4 lรธber. JUnit 5 erstatter det med JUnit perron Launcher API, normalt startet af IDE'en, Gradle eller Maven Surefire.
Fornavn JUnit Program
Godt kendskab til SDLC, Java programmering og det grundlรฆggende i software test processen hjรฆlper med at forstรฅ en JUnit program, ligesom det at vide hvordan enhedstest adskiller sig fra integrationstests.
Lad os forstรฅ enhedstestning ved hjรฆlp af et live-eksempel. Vi skal oprette en testklasse med en testmetode kommenteret med @Prรธve som angivet nedenfor:
MyFirstClassTest.java
package guru99.JUnit; import static org.junit.Assert.*; import org.junit.Test; public class MyFirstClassTest { @Test public void myFirstMethod(){ String str= "JUnit is working fine"; assertEquals("JUnit is working fine",str); } }
TestRunner.java
For at udfรธre vores testmetode (ovenfor) skal vi oprette en testrunner. I testrunneren skal vi tilfรธje testklassen som en parameter i JUnitCores runClasses()-metode. Den returnerer testresultatet, baseret pรฅ om testen er bestรฅet eller ikke bestรฅet.
For flere detaljer om dette, se koden nedenfor:
package guru99.JUnit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MyFirstClassTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Produktion
Nรฅr TestRunner.java udfรธrer vores testmetoder, fรฅr vi output som mislykket eller bestรฅet. Se venligst forklaringen pรฅ outputtet nedenfor:
- I dette eksempel efter udfรธrelse MyFirstClassTest.java, testen er bestรฅet, og resultatet er grรธnt.
- Hvis det var gรฅet galt, ville det have vist resultatet som rรธdt, og fejlen kan observeres i fejlen. trace. Se JUnit GUI nedenfor:


