JUnit Tesztesetek @Before @BeforeClass Annotation
โก Okos รถsszefoglalรณ
JUnit a legszรฉlesebb kรถrben hasznรกlt egysรฉgtesztelรฉsi keretrendszer Java, รฉs a tesztmetรณdusok annotรกciรณi pontosan szabรกlyozzรกk, hogy mi tรถrtรฉnik minden tesztmetรณdus lefutรกsa elลtt รฉs utรกn egy tesztosztรกlyon belรผl.
JUnit a legnรฉpszerลฑbb egysรฉg Tesztelรฉs keret be Java. Kifejezetten ajรกnlott Egysรฉg tesztelรฉse. JUnit nem igรฉnyel szervert a webes alkalmazรกs tesztelรฉsรฉhez, ami felgyorsรญtja a tesztelรฉsi folyamatot.
Az JUnit A keretrendszer lehetลvรฉ teszi a tesztesetek รฉs tesztadatok gyors รฉs egyszerลฑ generรกlรกsรกt is. A org.junit a csomag szรกmos interfรฉszt รฉs osztรกlyt tartalmaz a kรถvetkezลhรถz: JUnit tesztelรฉs, pรฉldรกul Teszt, รllรญtรกs, Utรกna รฉs Elลtte. A szรฉlesebb kรถrลฑ JUnit A csalรกd is ezekre az รฉpรญtลelemekre รฉpรญt.
Mi az a tesztkรฉszรผlรฉk?
Mielลtt megรฉrtenรฉnk, mi is az a tesztberendezรฉs, vizsgรกljuk meg az alรกbbi kรณdot.
Ez a kรณd kรฉt teszteset vรฉgrehajtรกsรกra szolgรกl egy egyszerลฑ fรกjlon.
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(); }
Itt van nรฉhรกny problรฉma
- A kรณd nem olvashatรณ.
- A kรณd karbantartรกsa nem egyszerลฑ.
- Ha a tesztcsomag รถsszetett, a kรณd logikai problรฉmรกkat tartalmazhat.
Hasonlรญtsa รถssze ugyanazt a kรณdot 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 } }
A kรณd sokkal olvashatรณbb รฉs karbantarthatรณbb. A fenti kรณdstruktรบra egy tesztkรฉszรผlรฉk.
A teszteszkรถz olyan kรถrnyezet, ahol a JUnit Teszt eset fut. A tesztberendezรฉsek รกltalรกban a kรถvetkezลket tartalmazzรกk:
- Olyan objektumok vagy erลforrรกsok, amelyek bรกrmely tesztesethez rendelkezรฉsre รกllnak.
- Azok a tevรฉkenysรฉgek, amelyek szรผksรฉgesek ezen tรกrgyak รฉs erลforrรกsok elรฉrhetลvรฉ tรฉtelรฉhez.
- Ezek a tevรฉkenysรฉgek
- kiosztรกs (felรฉpรญtรฉs)
- kiosztรกs megszรผntetรฉse (teardown).
Beรกllรญtรกs รฉs lebontรกs
A mรฉrkลzรฉsek azรฉrt fontosak, mert JUnit minden teszt kรถrรผl futtatja ezeket a horgokat.
- รltalรกban minden teszteset elลtt el kell vรฉgezni nรฉhรกny ismรฉtelt feladatot. Pรฉlda: adatbรกzis-kapcsolat lรฉtrehozรกsa.
- Hasonlรณkรฉppen, minden teszteset vรฉgรฉn elลfordulhat nรฉhรกny ismรฉtlลdล feladat. Pรฉlda: a teszt vรฉgrehajtรกsa utรกn megtisztรญtani.
- JUnit olyan annotรกciรณkat biztosรญt, amelyek segรญtenek a beรกllรญtรกsban รฉs a lebontรกsban. Biztosรญtja az erลforrรกsok felszabadรญtรกsรกt, รฉs a tesztrendszer kรฉszen รกll a kรถvetkezล tesztesetre.
Ezek JUnit az annotรกciรณkat az alรกbbiakban tรกrgyaljuk.
felรฉpรญtรฉs
@Elลtt megjegyzรฉs be JUnit tartalmazรณ mรณdszeren hasznรกljรกk Java kรณd, amely minden teszteset elลtt lefut, azaz minden teszt vรฉgrehajtรกsa elลtt lefut.
Lebontรกs (az รญtรฉlettลl fรผggetlenรผl)
@Utรกn az annotรกciรณt egy olyan metรณduson hasznรกljรกk, amely tartalmazza Java kรณdot kell futtatni minden teszteset utรกn. Ezek a metรณdusok akkor is lefutnak, ha bรกrmilyen kivรฉtel tรถrtรฉnik a tesztesetben, vagy ha รกllรญtรกsi hibรกk tรถrtรฉnnek.
Jegyzet:
- A fent felsorolt โโmegjegyzรฉsek szรกma tetszลleges.
- Az รถsszes metรณdus, amely a kรถvetkezลvel van ellรกtva @Elลtt in JUnit minden teszteset elลtt futnak, de bรกrmilyen sorrendben futhatnak.
- A @Before รฉs @After metรณdusokat รถrรถkรถlheted egy szuperosztรกlytรณl. A vรฉgrehajtรกs a kรถvetkezล, รฉs ez egy szabvรกnyos vรฉgrehajtรกsi folyamat a kรถvetkezลben: JUnit.
- Vรฉgezze el a JUnit @Before metรณdusok a szuperosztรกlyban
- Hajtsa vรฉgre a @Before metรณdusokat ebben az osztรกlyban
- Vรฉgezzen el egy @Test metรณdust ebben az osztรกlyban
- Hajtsa vรฉgre az @After metรณdusokat ebben az osztรกlyban
- Hajtsa vรฉgre a @After metรณdusokat a szuperosztรกlyban
JUnit 5-os megjegyzรฉs: ezek a megjegyzรฉsek JUnit 4 (org.junit). JUnit 5 รกtnevezte ลket org.junit.jupiter.api, รs a JUnit Az alรกbbi 4-es kรณd tovรกbbra is fut a vintage motor alatt.
| JUnit 4 megjegyzรฉs | JUnit 5 (Jupiter) egyenรฉrtรฉkลฑ | Runs |
|---|---|---|
| @Elลtt | @BeforeEach | Minden vizsgรกlati mรณdszer elลtt |
| @Utรกn | @AfterEach | Minden vizsgรกlati mรณdszer utรกn |
| @รra elลtt | @BeforeAll | Egyszer az egรฉsz osztรกly elลtt |
| @รra utรกn | @AfterAll | Egyszer az egรฉsz osztรกly utรกn |
| @Figyelmen kรญvรผl hagyni | @Fogyatรฉkkal รฉlล | Kihagyja a jegyzetekkel ellรกtott tesztet |
Pรฉlda: Osztรกly lรฉtrehozรกsa fรกjllal tesztberendezรฉskรฉnt
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 } }
A fenti pรฉldรกban a vรฉgrehajtรกsi lรกnc a kรถvetkezลkรฉppen alakul. Az รกbra tracegy lรฉtrehozรกs-tesztelรฉs-tรถrlรฉs ciklus tesztelรฉsi metรณdusonkรฉnt.
- createOutputFile()
- tesztfรกjl1()
- deleteOutputFile()
- createOutputFile()
- tesztfรกjl2()
- deleteOutputFile()
Feltevรฉs:
A testFile1() fรผggvรฉny a testFile2() fรผggvรฉny elลtt fut le, ami nem garantรกlt.
Egyszeri beรกllรญtรกs
- Egy mรณdszer csak egyszer futhat le a teljes tesztosztรกlyban, mielลtt bรกrmelyik tesztet vรฉgrehajtanรก, รฉs bรกrmely @Elลtt mรณd).
- Az โegyszeri beรกllรญtรกsโ hasznos a szerverek indรญtรกsรกhoz, a kommunikรกciรณ megnyitรกsรกhoz รฉs hasonlรณ munkรกkhoz. Idลigรฉnyes az erลforrรกsok lezรกrรกsa รฉs รบjranyitรกsa minden teszthez.
- Ezt a megjegyzรฉs segรญtsรฉgรฉvel lehet megtenni @รra elลtt in JUnit.
@BeforeClass public static void Method_Name() { // class setup code here }
A mรณdszernek a kรถvetkezลnek kell lennie: nyilvรกnos statikus ลฑr, Mert JUnit meghรญvja, mielลtt bรกrmilyen tesztpรฉldรกny lรฉtezne.
Csak egyszer bontsa le
- Az egyszeri beรกllรญtรกshoz hasonlรณan egy egyszeri tisztรญtรกsi mรณdszer is elรฉrhetล. Ez az รถsszes tesztmetรณdus utรกn fut le, รฉs @Utรกn a megjegyzรฉsek vรฉgrehajtรกsra kerรผltek.
- Hasznos a megรกllรกshozping szerverek รฉs a kommunikรกciรณs kapcsolatok lezรกrรกsa.
- Ezt a @รra utรกn kommentรกr.
@AfterClass public static void Method_Name() { // class cleanup code here }
JUnit Teszt lakosztรกlyok
Miutรกn a szerelvรฉnyek a helyรผkรถn vannak, a kapcsolรณdรณ tesztosztรกlyokat รกltalรกban csoportosรญtjรกk รฉs egyรผtt indรญtjรกk el.
Ha tรถbb tesztet szeretnรฉnk meghatรกrozott sorrendben vรฉgrehajtani, akkor ezt รบgy tehetjรผk meg, hogy az รถsszes tesztet egy helyen egyesรญtjรผk. Ezt a helyet tesztkรฉszletnek nevezzรผk. Tovรกbbi rรฉszletek a tesztkรฉszletek vรฉgrehajtรกsรกrรณl รฉs hasznรกlatรกrรณl a kรถvetkezล helyen talรกlhatรณk: JUnit ebben szerepelnek oktatรณi.
JUnit Tesztfutรณ
JUnit eszkรถzt biztosรญt a tesztesetek vรฉgrehajtรกsรกhoz.
- JUnitMag osztรกlyt hasznรกljรกk ezeknek a teszteknek a vรฉgrehajtรกsรกra.
- Az รบgynevezett mรณdszer runClasses รกltal biztosรญtott org.junit.runner.JUnitMag egy vagy tรถbb tesztosztรกly futtatรกsรกra szolgรกl.
- Ennek a mรณdszernek a visszatรฉrรฉsi tรญpusa a Eredmรฉny tรกrgy (org.junit.runner.Result), amely a tesztekkel kapcsolatos informรกciรณk elรฉrรฉsรฉre szolgรกl. A jobb รฉrthetลsรฉg รฉrdekรฉben lรกsd a kรถvetkezล kรณdpรฉldรกt.
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()); } }
A fenti kรณdban a โresultโ objektum feldolgozรกsa sorรกn a vรฉgrehajtott tesztesetek hibรกit รฉs sikeres eredmรฉnyeit kapjuk meg. Segรญtล objektumok, mint pรฉldรกul asserEquals emelje fel ezeket a kudarcokat, mikรถzben @Figyelmen kรญvรผl hagyni kihagy egy tesztet.
JUnit 5-os megjegyzรฉs: JUnitMag a JUnit 4 futรณ. JUnit 5 helyettesรญti azt a kรถvetkezลvel: JUnit Emelvรฉny Launcher API, amelyet รกltalรกban az IDE indรญt el, Gradle vagy Maven Surefire.
vezetรฉknรฉv JUnit Program
Az SDLC megfelelล ismerete, Java programozรกs, รฉs az alapismeretek szoftver tesztelรฉs a folyamat segรญt megรฉrteni egy JUnit program, ahogy az is, hogyan egysรฉg tesztek kรผlรถnbรถzik az integrรกciรณs tesztektลl.
รrtsรผk meg az egysรฉgtesztelรฉst egy รฉlล pรฉldรกn keresztรผl. Lรฉtre kell hoznunk egy tesztosztรกlyt egy tesztmetรณdussal, amely a kรถvetkezลvel van annotรกlva: @Teszt az alรกbbiak szerint:
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
A fenti tesztmetรณdusunk vรฉgrehajtรกsรกhoz lรฉtre kell hoznunk egy tesztfuttatรณt. A tesztfuttatรณban paramรฉterkรฉnt kell hozzรกadnunk a tesztosztรกlyt a kรถvetkezลhรถz: JUnitA Core runClasses() metรณdusa. Visszaadja a teszt eredmรฉnyรฉt, attรณl fรผggลen, hogy a teszt sikeres volt-e vagy sem.
Tovรกbbi rรฉszletekรฉrt lรกsd az alรกbbi kรณdot:
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()); } }
teljesรญtmรฉny
Egyszer TestRunner.java A tesztmetรณdusok vรฉgrehajtรกsakor a kimenet โsikertelenโ vagy โsikeresโ lesz. Az alรกbbiakban a kimenet magyarรกzatรกt talรกlja:
- Ebben a pรฉldรกban a vรฉgrehajtรกs utรกn MyFirstClassTest.java, a teszt sikeres, รฉs az eredmรฉny zรถld.
- Ha nem sikerรผlt volna, az eredmรฉny piros szรญnnel lett volna jelรถlve, รฉs a hiba megfigyelhetล lett volna a hibaรผzenetben. trace. Lรกsd a JUnit Grafikus felhasznรกlรณi felรผlet alรกbb:


