Vadnica JUnit Annotations s primerom

Kazalo:

Anonim

Kaj so pripisi JUnit?

JUNIT ANNOTATIONS je posebna oblika sintaktičnih metapodatkov, ki jih lahko dodamo izvorni kodi Java za boljšo berljivost in strukturo kode. Spremenljivke, parametre, pakete, metode in razrede lahko označite. Pripisi so bili uvedeni v Junit4, zaradi česar je koda Java bolj berljiva in enostavna. To je velika razlika med Junit3 in Junit4, ki temelji na opombah.

S poznavanjem pripisov v programu Junit5 se lahko enostavno naučimo in izvedemo test JUnit. Spodaj je seznam pomembnih in pogosto uporabljenih pripisov:

Št. Pripisi Opis
1. @Test Ta pripis je zamenjava org.junit.TestCase, ki kaže, da je mogoče javno void metodo, na katero je pritrjen, izvesti kot testni primer.
2. @ Pred tem Ta pripis se uporablja, če želite pred vsakim testnim primerom izvesti kakšen stavek, na primer predpogoje.
3. @BeforeClass Ta pripis se uporablja, če želite izvesti nekaj stavkov, preden morajo biti vsi testni primeri, npr. Testna povezava, izvedeni pred vsemi testnimi primeri.
4. @Po Ta pripis lahko uporabite, če želite po vsakem preizkusu izvesti nekaj stavkov, na primer za ponastavitev spremenljivk, brisanje začasnih datotek, spremenljivk itd.
5. @Po pouku Ta pripis lahko uporabite, če želite po vseh testnih primerih zagnati nekaj stavkov, npr. Sprostitev virov po izvedbi vseh testnih primerov.
6. @ Prezre Ta pripis lahko uporabite, če želite med izvajanjem testa prezreti nekatere izjave, na primer onemogočiti nekatere primere preizkusa med izvajanjem testa.
7. @Test (timeout = 500) Ta pripis lahko uporabite, če želite med izvajanjem preizkusa nastaviti nekaj časovne omejitve, na primer, če delate v skladu s sporazumom o ravni storitev (SLA), in testi morajo biti končani v določenem času.
8. @Test (pričakovano = IllegalArgumentException.class) Ta pripis lahko uporabite, če želite med izvajanjem preizkusa obravnavati kakšno izjemo. Na primer, če želite preveriti, ali določena metoda vrže določeno izjemo ali ne.

V tej vadnici boste izvedeli-

  • Primer pripisov JUnit
  • JUnit Assert Class
  • Razred JUnit Test Cases
  • Razred JUnit TestResult
  • Razred JUnit Test Suite

Primer pripisov JUnit

Ustvarimo razred, ki pokriva pomembne pripise JUnit s preprostimi stavki za tiskanje in ga izvedemo s testnim tekaškim razredom:

1. korak: Razmislite o spodnjem razredu Java, ki ima različne metode, ki so priložene zgoraj navedenim pripisom:

JunitAnnotationsExample.java

paket guru99.junit;uvoz statične org.junit.Assert.assertEquals;uvoz statičnega org.junit.Assert.assertFalse;uvoz java.util.ArrayList;import org.junit.After;import org.junit.AfterClass;uvoz org.junit.Before;uvoz org.junit.BeforeClass;import org.junit.Ignore;uvoz org.junit.Test;javni razred JunitAnnotationsExample {zasebni seznam ArrayList ;@BeforeClassjavna statična praznina m1 () {System.out.println ("Uporaba @BeforeClass, izvedeno pred vsemi testnimi primeri");}@ Pred temjavna praznina m2 () {list = new ArrayList  ();System.out.println ("Uporaba pripisov @Before, izvedenih pred vsakim testnim primerom");}@Po poukujavna statična praznina m3 () {System.out.println ("Uporaba @AfterClass, izvedeno po vseh testnih primerih");}@Pojavna praznina m4 () {list.clear ();System.out.println ("Uporaba @After, izvedeno po vsakem testnem primeru");}@Testjavna praznina m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@ Prezrijavna praznina m6 () {System.out.println ("Uporaba @Ignore je ta izvedba prezrta");}@Test (timeout = 10)javna praznina m7 () {System.out.println ("Z @Test (timeout) ga lahko uporabimo za uveljavitev časovne omejitve v preskusnem primeru JUnit4");}@Test (pričakovano = NoSuchMethodException.class)javna praznina m8 () {System.out.println ("Z @Test (pričakovano) bo med izvajanjem preveril, ali obstaja izjema");}}

Korak 2) ustvarimo testni tekaški razred za izvedbo zgornjega testa:

TestRunner.java

paket guru99.junit;import org.junit.runner.JUnitCore;uvoz org.junit.runner.Result;import org.junit.runner.notification.Failure;javni razred TestRunner {public static void main (String [] args) {Rezultat rezultata = JUnitCore.runClasses (JunitAnnotationsExample.class);for (Napaka neuspeha: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Rezultat ==" + result.wasSuccessful ());}}

pričakovani rezultati

  • Vsi preizkusni primeri se bodo izvajali posamezno, vse izjave za tiskanje pa si lahko ogledate na konzoli.
  • Kot je razloženo v zgornji tabeli @Before, bo @BeforeClass [metoda m1 () in m2 ()] izvedena pred vsakim oziroma pred vsemi testnimi primeri.
  • Na enak način se @ after, @ afterClass (metoda m3 () in m4 ()) izvede po vsakem oziroma po vseh testnih primerih. @ignore (metoda m6 ()) bo obravnavana kot ignoriranje testa.

Podrobno analizirajmo testne primere, uporabljene v zgornjem razredu Java:

  1. Razmislite o metodi m5 (), kot je navedena spodaj:
@Testjavna praznina m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}

V zgornji metodi, ko dodajate niz v spremenljivko "seznam", torej

  • list.isEmpty () bo vrnil false.
  • assertFalse (list.isEmpty ()) mora vrniti true.
  • Posledično bo testni primer uspešen .

Ker ste na seznam dodali samo en niz, je tudi velikost ena.

  • list.size () mora vrniti vrednost int kot "1".
  • Torej mora assertEquals (1, list.size ()) vrniti true.
  • Posledično bo testni primer uspešen .
  1. Razmislite o metodi m7 (), kot je navedena spodaj:
@Test (timeout = 10)javna praznina m7 () {System.out.println ("Z @Test (timeout) ga lahko uporabimo za uveljavitev časovne omejitve v preskusnem primeru JUnit4");}

Kot smo že omenili, se pripomba @Test (timeout = 10) uporablja za uveljavitev časovne omejitve v testnem primeru.

  1. Razmislite o metodi m8 (), kot je navedena spodaj:
@Test (pričakovano = NoSuchMethodException.class)javna praznina m8 () {System.out.println ("Z @Test (pričakovano) bo med izvajanjem preveril, ali obstaja izjema");}

Kot smo že omenili, bo @Test (pričakovano) med izvajanjem preveril določeno izjemo, tako da bo metoda m8 () vrgla "Brez take izjeme metode." Posledično se bo test izvajal z izjemo.

Ko so vsi testni primeri opravljeni, je to uspešno izvedeno.

Dejanski rezultat

Ker so v zgornjem primeru trije primeri, se bodo vsi primeri izvajali posebej. Glej izhod spodaj :

Glejte spodnje izjave za tiskanje, ki jih lahko vidite na konzoli:

Uporaba @BeforeClass, izvedena pred vsemi testnimi primeri

Uporaba oznak @Before, izvedenih pred vsakim testnim primerom

Uporaba @After, izvedeno po vsakem testnem primeru

Uporaba oznak @Before, izvedenih pred vsakim testnim primerom

Z uporabo @Test (timeout) ga lahko uporabite za uveljavitev časovne omejitve v testnem primeru JUnit4

Uporaba @After, izvedeno po vsakem testnem primeru

Uporaba oznak @Before, izvedenih pred vsakim testnim primerom

Z uporabo @Test (pričakovano) bo med izvajanjem preveril določeno izjemo

Uporaba @After, izvedeno po vsakem testnem primeru

Uporaba @AfterClass, izvedena po vseh testnih primerih

JUnit Assert Class

Ta razred ponuja vrsto metod uveljavljanja, uporabnih za pisanje testnega primera. Če so vse trditve uveljavljene, so rezultati testa uspešni. Če katera koli izjava uveljavi ne uspe, rezultati preskusa ne uspejo.

Kot ste že videli, spodnja tabela opisuje pomembne metode in opis uveljavljanja:

Št. Metoda Opis
1. void assertEquals (logično pričakovano, logično dejansko) Preveri, ali sta dve vrednosti enaki metodi equals razreda Object
2. void assertFalse (logično stanje) funkcionalnost je preveriti, ali je stanje napačno.
3. void assertNotNull (objektni objekt) Funkcija "assertNotNull" je preveriti, ali objekt ni nulen.
4. void assertNull (objektni objekt) Funkcija "assertNull" je preveriti, ali je objekt ničen.
5. void assertTrue (logično stanje) Funkcija "assertTrue" je preveriti, ali je pogoj resničen.
6. void fail () Če želite odstraniti kakršno koli trditev o napaki, imate neuspeh (), ki vedno povzroči razsodbo.
7. void assertSame ([String message] Funkcija "assertSame" je preveriti, ali se dva predmeta nanašata na isti predmet.
8. void assertNotSame ([String message] Funkcija "assertNotSame" je preveriti, ali se predmeta ne nanašata na isti predmet.

Razred JUnit Test Cases

Za izvajanje več preizkusov je razred TestCase na voljo v paketih org.junit.TestCase . Annotation @Test pove JUnit, da je to javno void metodo (Test Case tukaj), na katero je pritrjena, mogoče zagnati kot testni primer.

Spodnja tabela prikazuje nekatere pomembne metode, ki so na voljo v razredu org.junit.TestCase :

Št. Metoda Opis
1. int countTestCases () Ta metoda se uporablja za štetje števila testnih primerov, izvedenih z metodo run (TestResult tr) .
2. TestResult createResult () Ta metoda se uporablja za ustvarjanje predmeta TestResult .
3. String getName () Ta metoda vrne niz, ki ni nič drugega kot TestCase .
4. TestResult run () Ta metoda se uporablja za izvajanje testa, ki vrne objekt TestResult
5. void run (TestResult rezultat) Ta metoda se uporablja za izvajanje testa z objektom TestResult, ki ne vrne ničesar.
6. void setName (ime niza) Ta metoda se uporablja za nastavitev imena TestCase.
7. void setUp () Ta metoda se uporablja za pisanje kode povezave vira. npr. Ustvari povezavo z bazo podatkov.
8. void tearDown () Ta metoda se uporablja za pisanje kode za izdajo vira. npr. sprostite povezavo z bazo podatkov po izvedbi transakcijske operacije.

Razred JUnit TestResult

Ko izvedete test, vrne rezultat (v obliki predmeta TestResult ). Ta objekt TestResult se lahko uporablja za analizo nastalega predmeta. Rezultat tega preskusa je lahko neuspešen ali uspešen. Glejte spodnjo tabelo za pomembne metode, uporabljene v razredu org.junit.TestResult:
Št. Metoda Opis
1. void addError (Test test, Throwable t) Ta metoda se uporablja, če želite v test dodati napako.
2. void addFailure (preizkus preskusa, AssertionFailedError t) Ta metoda se uporablja, če želite na seznam napak dodati napako.
3. void endTest (testni test) Ta metoda se uporablja za obveščanje o izvedbi (zaključku) testa
4. int errorCount () Ta metoda se uporablja za ugotavljanje napake med izvajanjem testa.
5. Napake štetja () Ta metoda preprosto vrne zbirko (tukaj naštevanje) napak.
6. int failureCount () Ta metoda se uporablja za ugotavljanje števila napak, zaznanih med izvajanjem testa.
7. void run (TestCase test) Ta metoda se uporablja za izvajanje testnega primera.
8. int runCount () Ta metoda preprosto šteje izveden test.
9. void startTest (testni test) Ta metoda se uporablja za obveščanje o začetku preskusa.
10. void stop () Ta metoda se uporablja za preizkusno zaustavitev.

Razred JUnit Test Suite

Če želite izvesti več testov v določenem vrstnem redu, lahko to storite tako, da na enem mestu združite vse teste. To mesto se imenuje kot testni apartma.

Glejte spodnjo tabelo za pomembne metode, uporabljene v razredu org.junit.TestSuite :

Št. Metoda Opis
1. void addTest (testni test) Ta metoda se uporablja, če želite paketu dodati test.
2. void addTestSuite (Class testClass) Ta metoda se uporablja, če želite med dodajanjem testa v paket določiti razred.
3. int countTestCases () Ta metoda se uporablja, če želite prešteti število testnih primerov.
4. String getName () Ta metoda se uporablja za pridobitev imena testne zbirke.
5. void run (TestResult rezultat) Ta metoda se uporablja za izvajanje testa in zbiranje rezultata testa v objektu TestResult .
6. void setName (ime niza) Ta metoda se uporablja za nastavitev imena TestSuite .
7. Test testAt (indeks int) Ta metoda se uporablja, če želite preskus vrniti pri določenem indeksu.
8. int testCount () Ta metoda se uporablja, če želite vrniti številne teste v zbirki.
9. opozorilo o statičnem preizkusu (sporočilo v nizu) Ta metoda vrne preizkus, ki ne bo uspel, in zabeleži opozorilno sporočilo.

Povzetek:

  • JUnit ponuja prenosni API, ki vsebuje vse pomembne razrede in pripise, uporabne pri pisanju preskusa enote.
  • Predavanja, ki so zelo koristna pri pisanju testnega primera
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • seznam pomembnih in pogosto uporabljenih pripisov

    @ Pred tem

    @BeforeClass

    @Po

    @Po pouku

    @Test

    @ Prezri