JUnit Testitapaukset @Before @BeforeClass Annotation

⚡ Älykäs yhteenveto

JUnit on laajimmin käytetty yksikkötestauskehys Java, ja sen testikiinnikkeiden merkinnät ohjaavat tarkalleen, mitä tapahtuu ennen ja jälkeen jokaisen testimetodin suorittamisen testiluokan sisällä.

  • 🔘 Asetelman: Testikiinnike on testitapauksen objektien ja resurssien kiinteä konteksti.
  • ☑️ Setup: @Before suoritetaan ennen jokaista testimetodia, kun taas @BeforeClass suoritetaan kerran ennen koko luokkaa.
  • ✅ Purkaminen: @After suoritetaan jokaisen testin jälkeen, vaikka testi epäonnistuisi tai väittämä epäonnistuisi.
  • 🧪 Tilata: Yläluokka @Before suoritetaan ensin, sitten aliluokka @Before, @Test ja lopuksi jokainen @After.
  • 🛠️ juoksija: JUnitCore.runClasses() suorittaa testiluokkia ja palauttaa Result-objektin, joka sisältää kaikki epäonnistuneet suoritukset.
  • 📊 JUnit 5: @Before, @After, @BeforeClass ja @AfterClass muuttuvat muotoon @BeforeEach, @AfterEach, @BeforeAll ja @AfterAll.

JUnit testikiinnike @Before- ja @BeforeClass-merkinnöillä

JUnit on suosituin yksikkö Testaus puitteet sisään Java. Sitä suositellaan nimenomaisesti Yksikkötestaus. JUnit ei vaadi palvelinta verkkosovelluksen testaamiseen, mikä tekee testausprosessista nopeaa.

JUnit puite mahdollistaa myös nopean ja helpon testitapausten ja testitietojen luomisen. The org.junit paketti sisältää useita rajapintoja ja luokkia JUnit testaus, kuten Testi, Väite, Jälkeen ja Ennen. Laajempi JUnit Perhe rakentaa samojen rakennuspalikoiden varaan.

Mikä on testilaite?

Ennen kuin ymmärrämme, mikä testikiinnitys on, tutkitaan alla olevaa koodia.

Tämä koodi on suunniteltu suorittamaan kaksi testitapausta yksinkertaisessa tiedostossa.

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(); 
}

Tässä vähän ongelmia

  • Koodia ei voi lukea.
  • Koodia ei ole helppo ylläpitää.
  • Kun testisarja on monimutkainen, koodi saattaa sisältää loogisia ongelmia.

Vertaa samaa koodia käyttämällä 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
    }
}

Koodi on paljon luettavampaa ja helpommin ylläpidettävää. Yllä oleva koodirakenne on testikiinnike.

Testilaite on konteksti, jossa a JUnit Testitapaus juoksee. Tyypillisesti testivarusteisiin kuuluvat:

  • Objektit tai resurssit, jotka ovat käytettävissä mihin tahansa testitapaukseen.
  • Vaadittavat toiminnot, jotka tekevät nämä esineet ja resurssit saataville.
  • Nämä toiminnot ovat
    1. jako (setup)
    2. jakaminen (purkamisen).

Asennus ja purku

Otteluohjelmat ovat tärkeitä, koska JUnit käyttää näitä koukkuja jokaisen testin ympärillä.

  • Yleensä on joitain toistuvia tehtäviä, jotka on tehtävä ennen jokaista testitapausta. Esimerkiksi: luo tietokantayhteys.
  • Samoin jokaisen testitapauksen lopussa voi olla toistuvia tehtäviä. Esimerkiksi: puhdistaa, kun testi on suoritettu.
  • JUnit tarjoaa merkintöjä, jotka auttavat asennuksessa ja purkamisessa. Se varmistaa, että resurssit vapautetaan ja testijärjestelmä on valmiina seuraavaa testitapausta varten.

Nämä JUnit merkintöjä käsitellään alla.

Perustaa

@Ennen huomautus sisään JUnit käytetään menetelmässä, joka sisältää Java koodi, joka suoritetaan ennen jokaista testitapausta, eli se suoritetaan ennen jokaista testin suoritusta.

Purkaminen (tuomiosta riippumatta)

@Jälkeen annotaatiota käytetään metodissa, joka sisältää Java koodi, joka suoritetaan jokaisen testitapauksen jälkeen. Nämä metodit suoritetaan, vaikka testitapauksessa heitettäisiin poikkeuksia tai jos väitteet epäonnistuvat.

Huomautus:

  • Yllä lueteltuja huomautuksia saa olla mikä tahansa määrä.
  • Kaikki menetelmät, joihin on merkitty @Ennen in JUnit suoritetaan ennen jokaista testitapausta, mutta ne voidaan suorittaa missä tahansa järjestyksessä.
  • Voit periä @Before- ja @After-metodit superluokalta. Suoritus on seuraava, ja se on standardi suoritusprosessi superluokassa JUnit.
  1. Suorita JUnit @Ennen menetelmät superluokassa
  2. Suorita @Before-metodit tässä luokassa
  3. Suorita @Test-menetelmä tässä luokassa
  4. Suorita @After-menetelmät tässä luokassa
  5. Suorita @After-metodit superluokassa

JUnit Vuoden 5 huomautus: nämä merkinnät ovat JUnit 4 (org.junit). JUnit 5 nimesi ne uudelleen vuonna org.junit.jupiter.api, ja JUnit Alla oleva koodi 4 toimii edelleen vintage-moottorilla.

JUnit 4 merkintää JUnit 5 (Jupiter) vastine Toimii
@Ennen @BeforeEach Ennen jokaista testausmenetelmää
@Jälkeen @AfterEach Jokaisen testimenetelmän jälkeen
@Ennen tuntia @EnnenKaikkia Kerran koko luokan edessä
@Oppitunnin jälkeen @AfterAll Kerran koko luokan jälkeen
@Jättää huomiotta @Vammaiset Ohittaa kommentoidun testin

Esimerkki: Luokan luominen, jossa testiasetelmana on tiedosto

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
    }
}

Yllä olevassa esimerkissä toteutusketju on seuraava. Kaavio tracyksi luonti-testaus-poisto-sykli testimetodia kohden.

JUnit @Ennen ja @Jälkeen suoritusketju kahden testausmenetelmän ympärillä

  1. createOutputFile()
  2. testitiedosto1()
  3. deleteOutputFile()
  4. createOutputFile()
  5. testitiedosto2()
  6. deleteOutputFile()

Oletus:

testFile1() suoritetaan ennen testFile2()-funktiota, mikä ei ole taattua.

Kertakäyttöinen asennus

  • Menetelmä on mahdollista suorittaa vain kerran koko testiluokassa ennen kuin jokin testeistä suoritetaan, ja ennen @Ennen menetelmä(t).
  • "Kerta-asennus" on hyödyllinen palvelimien käynnistämisessä, tietoliikenteen avaamisessa ja vastaavissa töissä. Resurssien sulkeminen ja uudelleen avaaminen kutakin testiä varten on aikaa vievää.
  • Tämä voidaan tehdä huomautuksen avulla @Ennen tuntia in JUnit.
@BeforeClass public static void Method_Name() {	
    // class setup code here	
 }	

Menetelmän on oltava julkinen staattinen tyhjyys, Koska JUnit kutsuu sitä ennen kuin yhtäkään testi-instanssia on olemassa.

Vain kerran purkaa

  • Samalla tavalla kuin kertakäyttöinen asennus, käytettävissä on myös kertakäyttöinen puhdistusmenetelmä. Se suoritetaan kaikkien testitapausmetodien jälkeen ja @Jälkeen huomautukset on suoritettu.
  • Se on hyödyllinen pysähdykseenping palvelimia ja sulkemalla tietoliikenneyhteyksiä.
  • Tämä voidaan tehdä käyttämällä @Oppitunnin jälkeen merkintä.
 @AfterClass public static void Method_Name()	
 {	
    // class cleanup code here	
 }	

JUnit Testaa Suites

Kun kalustot on asennettu, toisiinsa liittyvät testiluokat ryhmitellään ja käynnistetään yleensä yhdessä.

Jos haluamme suorittaa useita testejä tietyssä järjestyksessä, se voidaan tehdä yhdistämällä kaikki testit yhteen paikkaan. Tätä paikkaa kutsutaan testipaketiksi. Lisätietoja testipakettien suorittamisesta ja niiden käytöstä on kohdassa JUnit kuuluvat tämän piiriin oppitunti.

JUnit Testijuoksija

JUnit tarjoaa työkalun testitapausten suorittamiseen.

  • JUnitYdin luokkaa käytetään näiden testien suorittamiseen.
  • Menetelmä nimeltä runClasses antamat org.junit.runner.JUnitYdin käytetään yhden tai useamman testiluokan suorittamiseen.
  • Tämän menetelmän palautustyyppi on Tulos esine (org.junit.runner.Result), jota käytetään testien tietojen käyttämiseen. Katso seuraava koodiesimerkki selvemmän käsityksen saamiseksi.
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());					
   }		
}      

Yllä olevassa koodissa ”tulos”-objektia käsitellään suorittamiemme testitapausten epäonnistumisten ja onnistuneiden tulosten hakemiseksi. Apufunktiot, kuten väittääEquals nostaa esiin nuo epäonnistumiset samalla @Jättää huomiotta jättää kokeen väliin.

JUnit Vuoden 5 huomautus: JUnitYdin on JUnit 4 juoksijaa. JUnit 5 korvaa sen JUnit foorumi Launcher API, jonka IDE yleensä käynnistää, Gradle tai Maven Surefire.

Etunimi JUnit Ohjelma

Kohtuullinen SDLC:n tuntemus, Java ohjelmoinnin perusteet ja ohjelmistojen testaus prosessi auttaa ymmärtämään JUnit ohjelma, samoin kuin sen tietäminen, miten yksikkötestejä eroavat integraatiotesteistä.

Ymmärretään yksikkötestaus käytännön esimerkin avulla. Meidän on luotava testiluokka, jonka testimetodi on annotoitu seuraavasti: @Testata kuten alla on annettu:

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

Suorittaaksemme yllä olevan testimetodin, meidän on luotava testisuoritin. Testisuorittimeen meidän on lisättävä testiluokka parametrina JUnitCoren runClasses()-metodi. Se palauttaa testituloksen sen perusteella, läpäistiinkö vai hylättiinkö testi.

Lisätietoja tästä on alla olevassa koodissa:

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());							
   }		
}      	

ulostulo

Kerran TestRunner.java Suoritamme testimetodimme, ja saamme tulokseksi joko epäonnistuneen tai hyväksytyn. Alla on tulosteen selitys:

  1. Tässä esimerkissä suorituksen jälkeen MyFirstClassTest.java, testi on läpäisty ja tulos on vihreä.
  2. Jos se olisi epäonnistunut, se olisi näyttänyt tuloksen punaisena, ja epäonnistuminen voidaan havaita epäonnistumiskohdasta. trace. Katso JUnit Käyttöliittymä alla:

Eclipse JUnit näkymä, jossa näkyy vihreä läpäisypalkki MyFirstClassTestille

UKK

JUnit luo uuden instanssin testiluokasta jokaista testimetodia varten, joten instanssia ei ole olemassa, kun luokkatason koodia on ajettava. Metodin määrittäminen static antaa JUnit vedota siihen suoraan.

Ei. Metodijärjestystä ei ole tarkoituksella määritelty. JUnit 4 tarjousta @FixMethodOrder ja JUnit 5 tarjoaa @TestMethodOrderin, mutta tilauksesta riippuen signaalit kytketään toisiinsa.

Testimenetelmää ei koskaan kutsuta, ja se raportoidaan virheenä, ei epäonnistumisena. Kaikki @After-menetelmät toimivat edelleen, joten cleanupin on siedettävä osittain rakennettua kiinnitystä.

Uusien hankkeiden tulisi lisätä JUnit 5 koosteartefakti org.junit.jupiter:junit-jupiter. Joukkueet, joilla on perintöä JUnit Neljään sviittiin on lisätty junit-vintage-engine, joten molemmat toimivat samalla alustalla.

Testiväline on koko testin ympärille valmisteltu konteksti, mukaan lukien oikeat tiedostot tai yhteydet. Mock on yksi sijainen yhteistyökumppani, jolla on skriptattu toimintatapa, jonka usein luo laite.

Kyllä, @BeforeClassin kautta JUnit 4 tai @BeforeAll sisään JUnit 5. Jaetut kalusteet ovat nopeampia, mutta niissä on vuototila, joten varaa ne kalliille vain luku -resursseille.

Tekoälyavustajat lukevat luokan, päättelevät sen tarvitsemat yhteistyökumppanit ja luonnostelevat @Before-määrityksen vastaavalla @After-siivouksella. Tarkista aina luodut väitteet itse.

GitHub Copilot luo testiluokan metodin allekirjoituksen pohjalta, mukaan lukien elinkaarimerkinnät. Usein oletusarvoisesti JUnit 4 tuontia, joten varmista, että paketti vastaa moottoriasi.

Tiivistä tämä viesti seuraavasti: