JUnit Merkintöjen opetusohjelma, jossa on esimerkki: Mitä ovat @Test ja @After
⚡ Älykäs yhteenveto
JUnit merkinnät ovat syntaktisen metadatan muoto, joka lisätään Java lähdekoodia, jotta testaaja tietää, mitä metodeja suorittaa, milloin ne suoritetaan ja kuinka kauan kukin voi kestää.

Mikä on JUnit Huomautuksia?
JUnit merkinnät ovat erityinen syntaktisen metadatan muoto, joka voidaan lisätä Java lähdekoodia paremman luettavuuden ja rakenteen saavuttamiseksi. Muuttujia, parametreja, paketteja, metodeja ja luokkia voidaan annotoida. Annotaatiot otettiin käyttöön vuonna JUnit 4, mikä tekee Java koodia luettavampaa ja yksinkertaisempaa. Tämä on suuri ero JUnit 3 ja JUnit 4: JUnit 4 perustuu annotaatioihin.
Näiden merkintöjen käytännön tuntemuksen avulla voi helposti oppia ja toteuttaa JUnit testata. Alla on tärkeä ja usein käytetty JUnit merkintäluettelo, jossa on JUnit 5 (Jupiter) vastine jokaisen vieressä:
| S.No. | Merkinnät | Tuotetiedot | JUnit 5 vastaavaa |
|---|---|---|---|
| 1. | @Testata | Tämä annotaatio korvaa junit.framework.TestCase-metodin ja osoittaa, että public void -metodi, johon se on liitetty, voidaan suorittaa testitapauksena. | @Test (org.junit.jupiter.api) |
| 2. | @Ennen | Tätä huomautusta käytetään, jos haluat suorittaa jonkin käskyn, kuten ennakkoehdot, ennen jokaista testitapausta. | @BeforeEach |
| 3. | @Ennen tuntia | Tätä annotaatiota käytetään, jos haluat suorittaa joitakin lauseita ennen kaikkia testitapauksia, esimerkiksi testiyhteyden, joka on avattava ennen kaikkia testitapauksia. | @EnnenKaikkia |
| 4. | @Jälkeen | Tätä merkintää voidaan käyttää, jos haluat suorittaa joitain lauseita jokaisen jälkeen Testitapaus, esimerkiksi muuttujien nollaaminen tai väliaikaisten tiedostojen poistaminen. | @AfterEach |
| 5. | @Oppitunnin jälkeen | Tätä annotaatiota voidaan käyttää, jos haluat suorittaa joitakin lauseita kaikkien testitapausten jälkeen, esimerkiksi vapauttaa resursseja kaikkien testitapausten suorittamisen jälkeen. | @AfterAll |
| 6. | @Jättää huomiotta | Tätä annotaatiota voidaan käyttää, jos haluat jättää joitakin lauseita huomiotta testin suorituksen aikana, esimerkiksi poistaa joitakin testitapauksia käytöstä testin suorituksen aikana. | @Vammaiset |
| 7. | @Testi(aikakatkaisu=500) | Tätä merkintää voidaan käyttää, jos haluat asettaa aikakatkaisun testin suorituksen aikana, esimerkiksi jos työskentelet SLA:n (palvelutasosopimuksen) alaisuudessa ja testit on suoritettava tietyn ajan kuluessa. | @Timeout tai assertTimeout |
| 8. | @Test(expected=IllegalArgumentException.class) | Tätä annotaatiota voidaan käyttää, jos haluat käsitellä jonkin poikkeuksen testin suorituksen aikana. Esimerkiksi, jos haluat tarkistaa, heittääkö tietty metodi tietyn poikkeuksen vai ei. | assertThrows |
JUnit Esimerkki huomautuksista
Luodaan luokka, joka kattaa tärkeitä JUnit huomautukset yksinkertaisilla tulostuslauseilla ja suorita se testirunner-luokassa:
Vaihe 1) Harkitse alla olevaa Java luokka, jolla on erilaisia metodeja, jotka on liitetty yllä lueteltuihin merkintöihin:
JunitAnnotationsExample.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
Vaihe 2) Luodaan testisuoritinluokka yllä olevan testin suorittamiseksi:
TestRunner.java
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(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
odotettu tulos
- Kaikki testitapaukset suoritetaan yksi kerrallaan, ja kaikki tulostuslausekkeet näkyvät konsolissa.
- Kuten yllä olevassa taulukossa on käsitelty, @Before ja @BeforeClass kohdassa JUnit [metodit m2() ja m1()] suoritetaan ennen jokaista testitapausta ja vastaavasti ennen kaikkia testitapauksia.
- Samalla tavalla @After ja @AfterClass JUnit (metodit m4() ja m3()) suoritetaan kunkin testitapauksen ja kaikkien testitapausten jälkeen. @Ignore (metodi m6()) tulkitaan testin hylkäämiseksi.
Analysoidaan yllä käytetyt testitapaukset Java luokka tarkemmin:
- Tarkastellaan alla olevaa metodia m5():
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
Yllä olevassa menetelmässä, kun lisäät merkkijonon muuttujaan "list":
- list.isEmpty() palauttaa false.
- assertFalse(list.isEmpty()) täytyy palata tosi.
- Tämän seurauksena testitapaus tulee kulkea.
Koska olet lisännyt listaan vain yhden merkkijonon, koko on yksi.
- lista.koko() täytyy palauttaa kokonaislukuarvo ”1”.
- So assertEquals(1, list.size()) täytyy palata tosi.
- Tämän seurauksena testitapaus tulee kulkea.
- Tarkastellaan alla olevaa metodia m7():
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
Kuten edellä on mainittu, @Test(aikakatkaisu = 10) käytetään aikakatkaisun asettamiseen testitapauksessa. Arvo on millisekunteina, joten m7():n on päätyttävä 10 ms:n kuluessa.
- Tarkastellaan alla olevaa metodia m8():
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Kuten edellä on mainittu, @Testi(odotettu) tarkistaa määritettyä poikkeusta suorituksensa aikana, joten metodi m8() heittää ilmoituksen ”No Such Method Exception”. Tämän seurauksena testi suoritetaan poikkeuksella.
Tarkkuushuomautus: m8() tulostaa vain rivin, joten ilmoitettua poikkeusta ei koskaan itse asiassa heitetä ja JUnit 4 raportoi testin epäonnistuneeksi. Sovita odotettu tyyppi metodin todelliseen heittämään tulokseen. JUnit 5 kirjoittaa tämän assertThrows.
Koska kaikki testitapaukset on hyväksytty, tämä johtaa onnistuneeseen testin suorittamiseen.
Todellinen tulos
Koska yllä olevassa esimerkissä on kolme testitapausta, ne suoritetaan yksi kerrallaan. Katso alla oleva konsolin kuvakaappaus:

Katso alla tulostetut lausunnot, jotka näkyvät konsolissa:
@BeforeClass käyttö, suoritetaan ennen kaikkia testitapauksia
@Before-merkintöjen käyttäminen, joka suoritetaan ennen jokaista testitapausta
@After-toiminto, joka suoritetaan jokaisen testitapauksen jälkeen
@Before-merkintöjen käyttäminen, joka suoritetaan ennen jokaista testitapausta
Käyttämällä @Test(timeout) sitä voidaan käyttää aikakatkaisun pakottamiseen JUnit4 testitapausta
@After-toiminto, joka suoritetaan jokaisen testitapauksen jälkeen
@Before-merkintöjen käyttäminen, joka suoritetaan ennen jokaista testitapausta
Käyttämällä @Test(expected) -toimintoa se tarkistaa tietyn poikkeuksen varalta suorituksensa aikana
@After-toiminto, joka suoritetaan jokaisen testitapauksen jälkeen
@AfterClassilla, suoritetaan kaikkien testitapausten jälkeen
JUnit Assert Class
Annotaatiot päättävät, milloin metodi suoritetaan; assert-metodit päättävät, onnistuuko se.
Tämä luokka tarjoaa joukon assertion-metodeja, jotka ovat hyödyllisiä testitapausten kirjoittamisessa. Jos kaikki assert-lausekkeet onnistuvat, testitulokset ovat onnistuneita. Jos jokin assert-lauseke epäonnistuu, testitulokset ovat hylättyjä. Omistettu JUnit puolustaa opetusohjelma käsittelee kutakin menetelmää perusteellisesti.
Kuten aiemmin näit, alla oleva taulukko kuvaa tärkeitä Assert-metodeja ja niiden kuvauksia:
| S.No. | Menetelmä | Tuotetiedot |
|---|---|---|
| 1. | void assertEquals (oletettu looginen arvo, todellinen looginen arvo) | Se tarkistaa, ovatko kaksi arvoa yhtä suuret, samalla tavalla kuin Object-luokan equals-metodi. |
| 2. | void assertFalse (boolen ehto) | Toiminnallisuus on tarkistaa, että ehto on epätosi. |
| 3. | void assertNotNull(Object object) | "assertNotNull"-toiminto on tarkistaa, että objekti ei ole tyhjä. |
| 4. | void assertNull(Objektiobjekti) | "assertNull"-toiminto on tarkistaa, että objekti on tyhjä. |
| 5. | void assertTrue (boolen ehto) | "assertTrue"-toiminto on tarkistaa, että ehto on tosi. |
| 6. | void fail () | Jos haluat heittää väitevirheen, fail() johtaa aina hylkäystuloksiin. |
| 7. | void assertSame([merkkijonoviesti] | "assertSame" -toiminto on tarkistaa, että nämä kaksi objektia viittaavat samaan objektiin. |
| 8. | void assertNotSame([merkkijonoviesti] | "assertNotSame" -toiminto on varmistaa, että nämä kaksi objektia eivät viittaa samaan objektiin. |
JUnit Testitapausten luokka
Useiden testien suorittamiseen TestCase-luokka on käytettävissä kohdassa junit.framework paketti. @Test-annotaatio kertoo JUnit että tätä public void -metodia (tässä testitapaus), johon se on liitetty, voidaan ajaa testitapauksena.
Versiohuomautus: Testitapaus, Testitulos ja TestSuite kuuluvat perintöön junit.framework paketti JUnit 3. Ne toimitetaan edelleen junit 4.x -artefaktin sisällä, mutta annotaatiopohjaiset testit eivät laajenna TestCasea.
Alla oleva taulukko näyttää joitakin tärkeitä menetelmiä, jotka ovat käytettävissä junit.framework.TestCase luokka:
| S.No. | Menetelmä | Tuotetiedot |
|---|---|---|
| 1. | int countTestCases() | Tätä menetelmää käytetään laskemaan, kuinka monta testitapausta suoritetaan suorita (TestResult tr) menetelmällä. |
| 2. | TestResult createResult() | Tätä menetelmää käytetään luomaan a Testitulos esine. |
| 3. | Merkkijono getName () | Tämä menetelmä palauttaa merkkijonon, joka on vain a Testitapaus nimi. |
| 4. | TestResult run() | Tätä metodia käytetään testin suorittamiseen, joka palauttaa Testitulos esine. |
| 5. | tyhjä ajo (testitulos) | Tätä menetelmää käytetään testin suorittamiseen, jolla on a Testitulos objekti, joka ei palauta mitään. |
| 6. | void setName (merkkijono) | Tätä menetelmää käytetään nimen asettamiseen Testitapaus. |
| 7. | void setUp() | Tätä metodia käytetään resurssien yhdistämiskoodin kirjoittamiseen, esimerkiksi tietokantayhteyden luomiseen. |
| 8. | void tearDown() | Tätä metodia käytetään resurssien vapautuskoodin kirjoittamiseen, esimerkiksi tietokantayhteyden vapauttamiseen transaktio-operaation suorittamisen jälkeen. |
JUnit Testitulosluokka
Kun suoritat testin, se palauttaa tuloksen (muodossa Testitulos objekti). Tätä TestResult-objektia voidaan käyttää tuloksena olevan objektin analysointiin. Tämä testitulos voi olla joko epäonnistunut tai onnistunut.
Katso alla olevasta taulukosta junit.framework.TestResult-luokassa käytetyt tärkeät metodit:
| S.No. | Menetelmä | Tuotetiedot |
|---|---|---|
| 1. | void addError (testi, heitettävissä t) | Tätä menetelmää käytetään, jos testiin on lisättävä virhe. |
| 2. | void addFailure (testi, AssertionFailedError t) | Tätä menetelmää käytetään, jos haluat lisätä vian vikojen luetteloon. |
| 3. | void endTest (testi) | Tätä menetelmää käytetään ilmoittamaan, että testi on suoritettu (valmis). |
| 4. | int errorCount() | Tätä menetelmää käytetään virheiden havaitsemiseen testin suorituksen aikana. |
| 5. | Luettelo virheet () | Tämä metodi palauttaa yksinkertaisesti kokoelman (tässä luettelon) virheitä. |
| 6. | int errorCount() | Tätä menetelmää käytetään testin suorituksen aikana havaittujen virheiden määrän selvittämiseen. |
| 7. | tyhjä ajo (TestCase-testi) | Tätä menetelmää käytetään testitapauksen suorittamiseen. |
| 8. | int runCount() | Tämä metodi yksinkertaisesti laskee suoritetut testit. |
| 9. | mitätön aloitustesti (testi) | Tätä menetelmää käytetään ilmoittamaan testin alkamisesta. |
| 10. | void stop() | Tätä menetelmää käytetään testiajon pysäyttämiseen. |
JUnit Test Suite Class
Jos haluat suorittaa useita testejä tietyssä järjestyksessä, se voidaan tehdä yhdistämällä kaikki testit yhteen paikkaan. Tätä paikkaa kutsutaan testipaketiksi, ja JUnit testisarja opetusohjelma käy läpi täydellisen esimerkin.
Katso alla olevasta taulukosta tärkeimmät käytetyt menetelmät junit.framework.TestSuite luokka:
| S.No. | Menetelmä | Tuotetiedot |
|---|---|---|
| 1. | void addTest (testi) | Tätä menetelmää käytetään, jos haluat lisätä sarjaan testin. |
| 2. | void addTestSuite(Class testiluokka) | Tätä menetelmää käytetään, jos haluat määrittää luokan, kun lisäät testin sarjaan. |
| 3. | int countTestCases() | Tätä menetelmää käytetään, jos haluat laskea testitapausten lukumäärän. |
| 4. | Merkkijono getName () | Tätä menetelmää käytetään testipaketin nimen saamiseksi. |
| 5. | tyhjä ajo (testitulos) | Tätä menetelmää käytetään testin suorittamiseen ja testitulosten keräämiseen Testitulos esine. |
| 6. | void setName (merkkijono) | Tätä menetelmää käytetään nimen asettamiseen TestSuite. |
| 7. | Testaa testiAt(int index) | Tätä metodia käytetään, jos haluat palauttaa testin tietyllä indeksillä. |
| 8. | int testCount() | Tätä metodia käytetään, jos haluat palauttaa testipaketin testimäärän. |
| 9. | staattinen testivaroitus (merkkijonoviesti) | Tämä menetelmä palauttaa testin, joka epäonnistuu, ja kirjaa varoitusviestin. |
