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.

  • ๐Ÿ”˜ Kรฉszรผlรฉk: A tesztberendezรฉs az objektumok รฉs erล‘forrรกsok rรถgzรญtett kontextusa, amelyben egy teszteset fut.
  • โ˜‘๏ธ Beรกllรญtรกs: A @Before minden tesztelรฉsi metรณdus elล‘tt lefut, mรญg a @BeforeClass egyszer az egรฉsz osztรกly elล‘tt fut le.
  • โœ… Lebontรกs: Az @After minden teszt utรกn lefut, mรฉg akkor is, ha a teszt dob โ€‹โ€‹vagy egy รกllรญtรกs sikertelen.
  • ๐Ÿงช Sorrend: Elล‘szรถr a @Before szuperosztรกly fut le, majd a @Before alosztรกly, a @Test, vรฉgรผl pedig az egyes @After osztรกlyok.
  • ๐Ÿ‡ง๐Ÿ‡ท Futรณ: JUnitA Core.runClasses() fรผggvรฉny vรฉgrehajtja a tesztosztรกlyokat, รฉs visszaad egy Result objektumot, amely tartalmazza az รถsszes hibรกt.
  • ๐Ÿ“Š JUnit 5: A @Before, @After, @BeforeClass รฉs @AfterClass elemekbล‘l @BeforeEach, @AfterEach, @BeforeAll รฉs @AfterAll lesz.

JUnit tesztberendezรฉs @Before รฉs @BeforeClass annotรกciรณkkal

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
    1. kiosztรกs (felรฉpรญtรฉs)
    2. 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.
  1. Vรฉgezze el a JUnit @Before metรณdusok a szuperosztรกlyban
  2. Hajtsa vรฉgre a @Before metรณdusokat ebben az osztรกlyban
  3. Vรฉgezzen el egy @Test metรณdust ebben az osztรกlyban
  4. Hajtsa vรฉgre az @After metรณdusokat ebben az osztรกlyban
  5. 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.

JUnit @Elล‘tte รฉs @Utรกna vรฉgrehajtรกsi lรกnc kรฉt tesztelรฉsi mรณdszer kรถrรผl

  1. createOutputFile()
  2. tesztfรกjl1()
  3. deleteOutputFile()
  4. createOutputFile()
  5. tesztfรกjl2()
  6. 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:

  1. Ebben a pรฉldรกban a vรฉgrehajtรกs utรกn MyFirstClassTest.java, a teszt sikeres, รฉs az eredmรฉny zรถld.
  2. 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:

Eclipse JUnit nรฉzet, amely egy zรถld รกteresztล‘ sรกvot mutat a MyFirstClassTest-hez

GYIK

JUnit minden tesztmetรณdushoz lรฉtrehoz egy รบj pรฉldรกnyt a tesztosztรกlybรณl, รญgy nem lรฉtezik pรฉldรกny, amikor osztรกlyszintลฑ kรณdnak kell futnia. A metรณdus deklarรกlรกsa statikus lesz JUnit kรถzvetlenรผl hรญvja elล‘.

Nem. A metรณdusok sorrendje szรกndรฉkosan nincs meghatรกrozva. JUnit 4 ajรกnlat a @FixMethodOrder-tล‘l รฉs JUnit Az 5-รถs verziรณ @TestMethodOrder-t kรญnรกl, de a megrendelรฉstล‘l fรผggล‘en a jelek รถsszekapcsolt teszteket is tartalmaznak.

A tesztmetรณdus soha nem kerรผl meghรญvรกsra, รฉs hibakรฉnt, nem pedig meghibรกsodรกskรฉnt jelenik meg. Bรกrmely @After metรณdus tovรกbbra is fut, รญgy a cleanupnak tolerรกlnia kell a rรฉszben felรฉpรญtett fixture-t.

Az รบj projekteknek hozzรก kell adniuk a JUnit 5 รถsszesรญtett mลฑtermรฉk: org.junit.jupiter:junit-jupiter. Csapatok, amelyek รถrรถksรฉgkรฉnt kezelik a rendszert. JUnit 4 csomag junit-vintage-engine-t ad hozzรก, รญgy mindkettล‘ egy platformon fut.

A fixture (gyakorlat) a teszt kรถrรผli teljes elล‘kรฉszรญtett kontextus, beleรฉrtve a valรณdi fรกjlokat vagy kapcsolatokat. A mock (prรณba) egyetlen helyettesรญtล‘ egyรผttmลฑkรถdล‘, szkriptelt viselkedรฉssel, amelyet gyakran a fixture hoz lรฉtre.

Igen, a @BeforeClass-on keresztรผl JUnit 4 vagy @BeforeAll be JUnit 5. A megosztott szerelvรฉnyek gyorsabbak, de szivรกrgรกsosak, ezรฉrt tartsuk fenn ล‘ket drรกga, csak olvashatรณ erล‘forrรกsok szรกmรกra.

Az MI asszisztensek beolvasnak egy osztรกlyt, kikรถvetkeztetik a szรผksรฉges egyรผttmลฑkรถdล‘ket, รฉs elkรฉszรญtik a @Before beรกllรญtรกst a megfelelล‘ @After tisztรญtรกssal. Mindig ellenล‘rizd a lรฉtrehozott รกllรญtรกsokat magad.

GitHub mรกsodpilรณta egy tesztosztรกlyt egy metรณdus szignatรบrรกbรณl รฉpรญt fel, beleรฉrtve az รฉletciklus annotรกciรณkat is. Gyakran alapรฉrtelmezรฉs szerint JUnit 4 import, ezรฉrt ellenล‘rizd, hogy a csomag illeszkedik-e a motorodhoz.

Foglald รถssze ezt a bejegyzรฉst a kรถvetkezล‘kรฉppen: