JUnit Märkuste õpetus koos näitega: Mis on @Test ja @After
⚡ Nutikas kokkuvõte
JUnit annotatsioonid on süntaktilise metaandme vorm, mis lisatakse Java lähtekood, et testija teaks, milliseid meetodeid käivitada, millal neid käivitada ja kui kaua igaüks neist aega võib võtta.
Mis on JUnit Märkused?
JUnit märkused on süntaktilise metaandmete erivorm, mida saab lisada Java lähtekoodi parema loetavuse ja struktuuri tagamiseks. Muutujaid, parameetreid, pakette, meetodeid ja klasse saab annoteerida. Annotatsioonid võeti kasutusele JUnit 4, mis teeb Java kood loetavam ja lihtsam. See on suur erinevus JUnit 3 ja JUnit 4: JUnit 4 põhineb annotatsioonidel.
Nende annotatsioonide tundmisega saab hõlpsalt õppida ja rakendada JUnit katsetada. Allpool on toodud olulised ja sageli kasutatavad JUnit märkuste loend koos JUnit 5 (Jupiteri) ekvivalent igaühe kõrval:
| S.No. | Annotatsioonid | Kirjeldus | JUnit 5 samaväärne |
|---|---|---|---|
| 1. | @Test | See märkus asendab junit.framework.TestCase'i ja näitab, et public void meetodit, millega see on seotud, saab käivitada testjuhtumina. | @Test (org.junit.jupiter.api) |
| 2. | @Enne | Seda märkust kasutatakse juhul, kui soovite enne iga testjuhtumit täita mõnda avaldust, näiteks eeltingimusi. | @BeforeEach |
| 3. | @BeforeClass | Seda annotatsiooni kasutatakse juhul, kui soovite enne kõiki testjuhtumeid käivitada teatud lauseid, näiteks testühenduse avamist enne kõiki testjuhtumeid. | @EnneKõiki |
| 4. | @Pärast | Seda märkust saab kasutada, kui soovite pärast iga lauset täita mõned laused Testjuhtum, näiteks muutujate lähtestamine või ajutiste failide kustutamine. | @AfterEach |
| 5. | @AfterClass | Seda annotatsiooni saab kasutada, kui soovite pärast kõiki testijuhtumeid mõningaid lauseid käivitada, näiteks ressursside vabastamiseks pärast kõigi testijuhtumite käivitamist. | @AfterAll |
| 6. | @Ignoreeri | Seda annotatsiooni saab kasutada, kui soovite testi käivitamise ajal mõningaid lauseid ignoreerida, näiteks mõned testijuhtumid testi käivitamise ajal keelata. | @Puudega |
| 7. | @Test(timeout=500) | Seda märkust saab kasutada, kui soovite testi käivitamise ajal teatud ajalõpu määrata, näiteks kui töötate SLA (teenustaseme leping) alusel ja testid tuleb kindlaksmääratud aja jooksul lõpule viia. | @Timeout või assertTimeout |
| 8. | @Test(expected=IllegalArgumentException.class) | Seda annotatsiooni saab kasutada, kui soovite testi käivitamise ajal mingit erandit käsitleda. Näiteks kui soovite kontrollida, kas konkreetne meetod tekitab määratud erandi või mitte. | assertThrows |
JUnit Märkuste näide
Loome klassi, mis hõlmab olulisi JUnit annotatsioonid lihtsate trükilausetega ja käivitage see testimisklassiga:
Step 1) Mõelge allpool toodule Java klass, millel on mitmesuguseid meetodeid, mis on lisatud ülaltoodud annotatsioonidele:
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"); } }
Step 2) Loome testi käivitaja klassi ülaltoodud testi käivitamiseks:
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()); } }
Oodatud Tulemus
- Kõik testid käivitatakse ükshaaval ja kõiki väljatrükkimislauseid saab konsoolil näha.
- Nagu ülaltoodud tabelis arutletud, @Before ja @BeforeClass JUnit [meetodid m2() ja m1()] käivitatakse vastavalt enne iga testi ja enne kõiki teisi testijuhtumeid.
- Samamoodi nagu @After ja @AfterClass ka teistes rakendustes. JUnit (meetodid m4() ja m3()) käivitatakse vastavalt pärast iga testi ja pärast kõiki teste. @Ignore (meetod m6()) käsitletakse testi ignoreerimisena.
Analüüsime ülaltoodud näites kasutatud testjuhtumeid. Java klass üksikasjalikumalt:
- Vaatleme meetodit m5() järgmiselt:
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
Ülaltoodud meetodis, kui lisate muutujale „list” stringi:
- list.isEmpty() tagastab vale.
- assertFalse(list.isEmpty()) peab tagastama tõeseks.
- Selle tulemusena katsejuhtum sooritama.
Kuna olete loendisse lisanud ainult ühe stringi, on suurus üks.
- list.size() peab tagastama täisarvu väärtuse „1”.
- So assertEquals(1, list.size()) peab tagastama tõeseks.
- Selle tulemusena katsejuhtum sooritama.
- Vaatleme meetodit m7() järgmiselt:
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
Nagu eespool kirjeldatud, @Test(ajalõpp = 10) kasutatakse testi ajalõpu jõustamiseks. Väärtus on millisekundites, seega peab m7() lõppema 10 ms jooksul.
- Vaatleme meetodit m8() järgmiselt:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Nagu eespool kirjeldatud, @Test (oodatud) kontrollib testi täitmise ajal määratud erandit, seega meetod m8() viskab veateate „Meetodi erandit ei ole“. Selle tulemusena käivitatakse test erandiga.
Täpsusmärkus: m8() prindib ainult rea, seega deklareeritud erandit tegelikult kunagi ei visata ja JUnit 4 annab testist teada, et see ebaõnnestus. Seadista eeldatav tüüp meetodi tegeliku tulemusega. JUnit 5 kirjutab seda koos assertThrows.
Kuna kõik testjuhtumid on läbitud, on selle tulemuseks edukas testi täitmine.
Tegelik tulemus
Kuna ülaltoodud näites on kolm testi, käivitatakse kõik testid ükshaaval. Vaadake allolevat konsooli ekraanipilti:

Vaadake allolevaid printimisavaldusi, mida saab näha konsoolil:
Kasutades @BeforeClass , käivitatakse enne kõiki testjuhtumeid
@Before märkuste kasutamine, käivitatakse enne iga testjuhtumit
Kasutades @After, käivitatakse pärast iga testjuhtumit
@Before märkuste kasutamine, käivitatakse enne iga testjuhtumit
Kasutades @Test(timeout), saab seda kasutada ajalõpu jõustamiseks JUnit4 katsejuhtumit
Kasutades @After, käivitatakse pärast iga testjuhtumit
@Before märkuste kasutamine, käivitatakse enne iga testjuhtumit
Kasutades @Test(expected), kontrollib see täitmise ajal määratud erandit
Kasutades @After, käivitatakse pärast iga testjuhtumit
Kasutades @AfterClassi, käivitatakse pärast kõiki testjuhtumeid
JUnit Kinnitusklass
Annotatsioonid otsustavad, millal meetod käivitatakse; assert-meetodid otsustavad, kas see õnnestub.
See klass pakub hulga kinnitusmeetodeid, mis on kasulikud testijuhtumi kirjutamisel. Kui kõik kinnituslaused sooritatakse, on testi tulemused edukad. Kui mõni kinnituslause ebaõnnestub, on testi tulemused ebaõnnestunud. Spetsiaalne JUnit väita Õpetus käsitleb iga meetodit põhjalikult.
Nagu te varem nägite, kirjeldab allolev tabel olulisi Assert-meetodeid ja nende kirjeldust:
| S.No. | Meetod | Kirjeldus |
|---|---|---|
| 1. | void assertEquals (oodatav tõeväärtus, tegelik tõeväärtus) | See kontrollib, kas kaks väärtust on võrdsed, sarnaselt Object-klassi equals-meetodile. |
| 2. | void assertFalse (tõve tingimus) | Funktsionaalsus seisneb selles, et kontrollida, kas tingimus on väär. |
| 3. | void assertNotNull(Objektobjekt) | Funktsioon "assertNotNull" on kontrollida, kas objekt pole null. |
| 4. | void assertNull (objektobjekt) | Funktsioon "assertNull" on kontrollida, kas objekt on null. |
| 5. | void assertTrue (tõve tingimus) | Funktsioon "assertTrue" on kontrollida, kas tingimus on tõene. |
| 6. | tühine ebaõnnestumine () | Kui soovite esitada kinnitusvea, annab fail() alati tulemuseks ebaõnnestunud tulemuse. |
| 7. | void assertSame([String teade] | Funktsioon "assertSame" on kontrollida, kas need kaks objekti viitavad samale objektile. |
| 8. | void assertNotSame([stringsõnum] | Funktsioon "assertNotSame" on kontrollida, et kaks objekti ei viitaks samale objektile. |
JUnit Testjuhtumite klass
Mitme testi käivitamiseks on TestCase klass saadaval junit.framework pakett. @Test annotatsioon näitab JUnit et seda avalikku tühimikku käsitlevat meetodit (siin testjuhtum), millele see on lisatud, saab käivitada testjuhtumina.
Versiooni märkus: TestCase, Testi tulemus ja TestSuite pärandi hulka kuuluvad junit.framework pakett alates JUnit 3. Need on endiselt junit 4.x artefakti sees, kuid annotatsioonipõhised testid ei laienda TestCase'i.
Allolev tabel näitab mõningaid olulisi meetodeid, mis on saadaval junit.framework.TestCase klass:
| S.No. | Meetod | Kirjeldus |
|---|---|---|
| 1. | int countTestCases() | Seda meetodit kasutatakse selleks, et loendada, mitu testi sooritab jooks (TestResult tr) meetod. |
| 2. | TestResult createResult() | Seda meetodit kasutatakse a Testi tulemus objekt |
| 3. | String getName() | See meetod tagastab stringi, mis pole midagi muud kui a TestCase nimi. |
| 4. | TestResult run() | Seda meetodit kasutatakse testi käivitamiseks, mis tagastab Testi tulemus objekt |
| 5. | tühine jooks (testitulemus) | Seda meetodit kasutatakse testi läbiviimiseks, millel on a Testi tulemus objekt, mis ei tagasta midagi. |
| 6. | void setName (stringi nimi) | Seda meetodit kasutatakse nime määramiseks. TestCase. |
| 7. | void setUp() | Seda meetodit kasutatakse ressursside seostamise koodi kirjutamiseks, näiteks andmebaasiühenduse loomiseks. |
| 8. | tühine tearDown() | Seda meetodit kasutatakse ressursi vabastamise koodi kirjutamiseks, näiteks andmebaasiühenduse vabastamiseks pärast tehingutoimingu sooritamist. |
JUnit Testi tulemuste klass
Testi käivitamisel tagastab see tulemuse (vormis Testi tulemus objekt). Seda TestResult objekti saab kasutada tulemuseks oleva objekti analüüsimiseks. See testi tulemus võib olla kas ebaõnnestunud või edukas.
Vaadake allolevat tabelit junit.framework.TestResult klassis kasutatavate oluliste meetodite kohta:
| S.No. | Meetod | Kirjeldus |
|---|---|---|
| 1. | void addError (Testi test, visatav t) | Seda meetodit kasutatakse juhul, kui on vaja testile viga lisada. |
| 2. | void addFailure(Test test, AssertionFailedError t) | Seda meetodit kasutatakse juhul, kui teil on vaja tõrgete loendisse lisada tõrge. |
| 3. | tühine lõputest (testi test) | Seda meetodit kasutatakse testi sooritamisest (lõpetamisest) teatamiseks. |
| 4. | int errorCount() | Seda meetodit kasutatakse testimise käigus esinevate vigade tuvastamiseks. |
| 5. | Loendamine vead () | See meetod tagastab lihtsalt vigade kogumi (siin loendi). |
| 6. | int errorCount() | Seda meetodit kasutatakse testi käivitamise ajal tuvastatud tõrgete arvu saamiseks. |
| 7. | tühikäik (TestCase test) | Seda meetodit kasutatakse testjuhtumi läbiviimiseks. |
| 8. | int runCount() | See meetod loendab lihtsalt teostatud teste. |
| 9. | tühine algusTest (testi test) | Seda meetodit kasutatakse testi alustamisest teatamiseks. |
| 10. | tühine peatus () | Seda meetodit kasutatakse testi käivitamise peatamiseks. |
JUnit Test Suite Class
Kui soovite mitut testi kindlas järjekorras käivitada, saab seda teha, koondades kõik testid ühte kohta. Seda kohta nimetatakse testide komplektiks ja JUnit testikomplekt õpetus tutvustab täielikku näidet.
Olulisemate meetodite kohta vaadake allolevat tabelit. junit.framework.TestSuite klass:
| S.No. | Meetod | Kirjeldus |
|---|---|---|
| 1. | tühine lisaTest (testi test) | Seda meetodit kasutatakse juhul, kui soovite komplektile testi lisada. |
| 2. | void addTestSuite(klass testClass) | Seda meetodit kasutatakse juhul, kui soovite komplekti testi lisamise ajal klassi täpsustada. |
| 3. | int countTestCases() | Seda meetodit kasutatakse testjuhtumite arvu loendamiseks. |
| 4. | String getName() | Seda meetodit kasutatakse testkomplekti nime saamiseks. |
| 5. | tühine jooks (testitulemus) | Seda meetodit kasutatakse testi läbiviimiseks ja testi tulemuste kogumiseks. Testi tulemus objekt |
| 6. | void setName (stringi nimi) | Seda meetodit kasutatakse nime määramiseks. TestSuite. |
| 7. | Test testAt(int index) | Seda meetodit kasutatakse juhul, kui soovite testi tagastada antud indeksiga. |
| 8. | int testCount() | Seda meetodit kasutatakse siis, kui soovite tagastada komplektis olevate testide arvu. |
| 9. | staatilise testi hoiatus (stringsõnum) | See meetod tagastab testi, mis ebaõnnestub ja logib hoiatusteate. |
