JUnit Annotations Tutorial with Example

Innholdsfortegnelse:

Anonim

Hva er JUnit-merknader?

JUNIT ANNOTATIONS er en spesiell form for syntaktiske metadata som kan legges til Java-kildekoden for bedre kodelesbarhet og struktur. Variabler, parametere, pakker, metoder og klasser kan kommenteres. Kommentarer ble introdusert i Junit4, noe som gjør Java-koden mer lesbar og enkel. Dette er den store forskjellen mellom Junit3 og Junit4 at Junit4 er basert på merknader.

Med kunnskapen om merknader i Junit5 kan man enkelt lære og implementere en JUnit-test. Nedenfor er listen over viktige og ofte brukte kommentarer:

S.No. Kommentarer Beskrivelse
1. @Test Denne merknaden er en erstatning for org.junit.TestCase som indikerer at den offentlige ugyldighetsmetoden som den er knyttet til kan utføres som en testsak.
2. @Før Denne kommentaren brukes hvis du vil utføre noen uttalelser som forutsetninger før hver testtilfelle.
3. @BeforeClass Denne kommentaren brukes hvis du vil utføre noen uttalelser før alle testtilfellene for f.eks. Testforbindelse må utføres før alle testsakene.
4. @Etter Denne kommentaren kan brukes hvis du vil utføre noen uttalelser etter hver testsak for f.eks. Tilbakestilling av variabler, sletting av midlertidige filer, variabler osv.
5. @Etter timen Denne kommentaren kan brukes hvis du vil utføre noen uttalelser etter alle testsaker for f.eks. Å frigjøre ressurser etter å ha utført alle testsaker.
6. @Ignorerer Denne kommentaren kan brukes hvis du vil ignorere noen utsagn under testutførelsen for f.eks. Å deaktivere noen testtilfeller under utførelsen av testen.
7. @Test (timeout = 500) Denne merknaden kan brukes hvis du vil angi noe tidsavbrudd under testutførelsen, for eksempel hvis du jobber under noen SLA (servicenivåavtale), og testene må fullføres innen en spesifisert tid.
8. @Test (forventet = IllegalArgumentException.class) Denne kommentaren kan brukes hvis du vil håndtere unntak under testutførelsen. For eksempel hvis du vil sjekke om en bestemt metode kaster spesifisert unntak eller ikke.

I denne veiledningen vil du lære-

  • Eksempler på JUnit-merknader
  • JUnit Assert Class
  • JUnit test tilfeller klasse
  • JUnit TestResult Class
  • JUnit Test Suite-klasse

Eksempler på JUnit-merknader

La oss lage en klasse som dekker viktige JUnit-merknader med enkle utskriftsuttalelser og utfører den med en testløperklasse:

Trinn 1) Vurder nedenfor Java-klassen som har forskjellige metoder som er knyttet til ovennevnte merknader:

JunitAnnotationsExample.java

pakke guru99.junit;importer statisk org.junit.Assert.assertEquals;importer statisk org.junit.Assert.assertFalse;importere java.util.ArrayList;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;importer org.junit.BeforeClass;import org.junit.Ignore;import org.junit.Test;offentlig klasse JunitAnnotationsExample {privat ArrayList  -liste;@BeforeClassoffentlig statisk tomrom m1 () {System.out.println ("Bruker @BeforeClass, utført før alle testsaker");}@Føroffentlig tomrom m2 () {liste = ny ArrayList  ();System.out.println ("Bruker @Before-merknader, utført før hver testtilfelle");}@Etter timenoffentlig statisk tomrom m3 () {System.out.println ("Bruker @AfterClass, utført etter alle testtilfeller");}@Etteroffentlig tomrom m4 () {list.clear ();System.out.println ("Bruker @After, utført etter hver testtilfelle");}@Testoffentlig tomrom m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@Overseoffentlig tomrom m6 () {System.out.println ("Ved å bruke @Ignore blir denne kjøringen ignorert");}@Test (timeout = 10)offentlig tomrom m7 () {System.out.println ("Ved hjelp av @ Test (tidsavbrudd) kan den brukes til å håndheve tidsavbrudd i JUnit4 testtilfelle");}@Test (forventet = NoSuchMethodException.class)offentlig tomrom m8 () {System.out.println ("Ved hjelp av @ Test (forventet), vil den sjekke for spesifisert unntak under utførelsen");}}

Trinn 2) La oss lage en testløperklasse for å utføre testen ovenfor:

TestRunner.java

pakke guru99.junit;importer org.junit.runner.JUnitCore;importer org.junit.runner.Result;import org.junit.runner.notification.Failure;offentlig klasse TestRunner {public static void main (String [] args) {Resultatresultat = JUnitCore.runClasses (JunitAnnotationsExample.class);for (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Resultat ==" + result.wasSuccessful ());}}

forventet resultat

  • Alle testsakene vil bli utført en etter en, og alle utskriftsuttalelser kan sees på en konsoll.
  • Som diskutert i tabellen ovenfor @For, vil @BeforeClass [metode m1 () og m2 ()] utføres før hver og før alle testtilfeller.
  • På samme måte @ etter vil @ etterklasse (metode m3 () og m4 ()) utføres etter henholdsvis hver og etter alle testtilfeller. @ignore (metode m6 ()) blir behandlet som å ignorere testen.

La oss analysere testtilfeller brukt i Java-klassen i detalj:

  1. Vurder metode m5 () som gitt nedenfor:
@Testoffentlig tomrom m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}

I metoden ovenfor når du legger til en streng i variabelen "liste" så

  • list.isEmpty () vil returnere false.
  • assertFalse (list.isEmpty ()) må returnere true.
  • Som et resultat vil prøvesaken bestå .

Ettersom du bare har lagt til en streng i listen, er størrelsen en.

  • list.size () må returnere int-verdien som "1".
  • assertEquals (1, list.size ()) må returnere true.
  • Som et resultat vil prøvesaken bestå .
  1. Vurder metode m7 () som gitt nedenfor:
@Test (timeout = 10)offentlig tomrom m7 () {System.out.println ("Ved hjelp av @ Test (tidsavbrudd) kan den brukes til å håndheve tidsavbrudd i JUnit4 testtilfelle");}

Som diskutert ovenfor @Test (timeout = 10) brukes merknader for å håndheve timeout i testsaken .

  1. Vurder metode m8 () som gitt nedenfor:
@Test (forventet = NoSuchMethodException.class)offentlig tomrom m8 () {System.out.println ("Ved hjelp av @ Test (forventet), vil den sjekke for spesifisert unntak under utførelsen");}

Som diskutert ovenfor vil @Test (forventet) se etter spesifisert unntak under utførelsen, slik at metoden m8 () vil kaste "No such Method Exception." Som et resultat vil testen utføres med unntak.

Ettersom alle testsaker er bestått, resulterer dette i en vellykket testutførelse.

Egentlige resultatet

Ettersom det er tre testsaker i eksemplet ovenfor, vil alle testsakene bli utført en etter en. Se utdata nedenfor :

Se nedenfor utskriftsuttalelser som kan sees på konsollen:

Bruker @BeforeClass, utført før alle testsaker

Ved hjelp av @For kommentarer, utført før hver testtilfelle

Bruker @After, utført etter hver testtilfelle

Ved hjelp av @For kommentarer, utført før hver testtilfelle

Ved hjelp av @Test (timeout) kan den brukes til å håndheve timeout i JUnit4 testtilfelle

Bruker @After, utført etter hver testtilfelle

Ved hjelp av @For kommentarer, utført før hver testtilfelle

Ved hjelp av @Test (forventet) vil den sjekke om det er angitt unntak under utførelsen

Bruker @After, utført etter hver testtilfelle

Bruker @AfterClass, utført etter alle testsaker

JUnit Assert Class

Denne klassen gir en rekke påstandsmetoder som er nyttige for å skrive en test case. Hvis alle påstandene er bestått, er testresultatene vellykkede. Hvis noen påstandssignaler mislykkes, mislykkes testresultatene.

Som du har sett tidligere, beskriver tabellen nedenfor viktige påstandsmetoder og beskrivelse:

S.No. Metode Beskrivelse
1. void assertEquals (forventet boolsk, boolsk faktisk) Den sjekker om to verdier er lik lik metoden for objektklasse
2. ugyldig påstand Falsk (boolsk tilstand) funksjonalitet er å kontrollere at en tilstand er falsk.
3. void assertNotNull (Objektobjekt) "assertNotNull" funksjonalitet er å kontrollere at et objekt ikke er null.
4. void assertNull (Objektobjekt) "assertNull" funksjonalitet er å kontrollere at et objekt er null.
5. ugyldig påstand Sann (boolsk tilstand) "assertTrue" -funksjonalitet er å kontrollere at en tilstand er oppfylt.
6. ugyldig mislykkes () Hvis du vil kaste påstand om feil, har du fail () som alltid resulterer i en fail-dom.
7. void assertSame ([Strengmelding] "assertSame" funksjonalitet er å kontrollere at de to objektene refererer til det samme objektet.
8. void assertNotSame ([Strengmelding] "assertNotSame" funksjonalitet er å kontrollere at de to objektene ikke refererer til det samme objektet.

JUnit test tilfeller klasse

For å kjøre flere tester er TestCase-klassen tilgjengelig i org.junit.TestCase- pakker. Kommentar @Test forteller JUnit at denne offentlige ugyldighetsmetoden (Test Case her) som den er knyttet til, kan kjøres som en testcase.

Tabellen nedenfor viser noen viktige metoder tilgjengelig i org.junit.TestCase klasse:

S.No. Metode Beskrivelse
1. int countTestCases () Denne metoden brukes til å telle hvor mange antall testtilfeller som kjøres etter kjøremetoden (TestResult tr) .
2. TestResult createResult () Denne metoden brukes til å lage et TestResult- objekt.
3. String getName () Denne metoden returnerer en streng som ikke er annet enn en TestCase .
4. TestResult kjøre () Denne metoden brukes til å utføre en test som returnerer et TestResult- objekt
5. ugyldig kjøring (TestResult-resultat) Denne metoden brukes til å utføre en test med et TestResult- objekt som ikke returnerer noe.
6. void setName (strengnavn) Denne metoden brukes til å angi et navn på en TestCase.
7. ugyldig setUp () Denne metoden brukes til å skrive ressursassosiasjonskode. f.eks. opprette en databaseforbindelse.
8. ugyldig tearDown () Denne metoden brukes til å skrive ressursutgivelseskode. Frigjør f.eks. databaseforbindelsen etter at du har utført transaksjonsoperasjon.

JUnit TestResult Class

Når du utfører en test, returnerer den et resultat (i form av TestResult- objekt). Dette TestResult-objektet kan brukes til å analysere det resulterende objektet. Dette testresultatet kan være enten mislykket eller vellykket. Se tabellen nedenfor for viktige metoder som brukes i org.junit.TestResult klasse:
S.No. Metode Beskrivelse
1. void addError (Test test, Throwable t) Denne metoden brukes hvis du trenger å legge til en feil i testen.
2. void addFailure (Test test, AssertionFailedError t) Denne metoden brukes hvis du trenger å legge til en feil i listen over feil.
3. void endTest (Test test) Denne metoden brukes til å varsle om at en test er utført (fullført)
4. int errorCount () Denne metoden brukes til å oppdage feilen under testutførelsen.
5. Oppregning feil () Denne metoden returnerer ganske enkelt en samling (Enumeration here) av feil.
6. int failureCount () Denne metoden brukes for å få antall feil oppdaget under testutførelse.
7. ugyldig kjøring (TestCase test) Denne metoden brukes til å utføre en testtilfelle.
8. int runCount () Denne metoden teller ganske enkelt den utførte testen.
9. void startTest (Test test) Denne metoden brukes til å varsle om at en test er startet.
10. ugyldig stopp () Denne metoden brukes til å prøvekjøres for å stoppes.

JUnit Test Suite-klasse

Hvis du vil utføre flere tester i en spesifisert rekkefølge, kan det gjøres ved å kombinere alle testene på ett sted. Dette stedet kalles test-suitene.

Se tabellen nedenfor for viktige metoder som brukes i org.junit.TestSuite- klassen:

S.No. Metode Beskrivelse
1. void addTest (Test test) Denne metoden brukes hvis du vil legge til en test i suiten.
2. ugyldig addTestSuite (klasse testClass) Denne metoden brukes hvis du vil spesifisere klassen mens du legger til en test i suiten.
3. int countTestCases () Denne metoden brukes hvis du vil telle antall testtilfeller.
4. String getName () Denne metoden brukes for å få navnet på testpakken.
5. ugyldig kjøring (TestResult-resultat) Denne metoden brukes til å utføre en test og samle testresultat i TestResult- objektet.
6. void setName (strengnavn) Denne metoden brukes til å angi navnet på TestSuite .
7. Test testAt (int-indeks) Denne metoden brukes hvis du vil returnere testen ved gitt indeks.
8. int testCount () Denne metoden brukes hvis du vil returnere en rekke tester i Suite.
9. statisk testadvarsel (strengmelding) Denne metoden returnerer en test som mislykkes og logger en advarsel.

Sammendrag:

  • JUnit tilbyr en bærbar API som gir alle viktige klasser og merknader som er nyttige for å skrive en enhetstest.
  • Klasser som er veldig nyttige når du skriver en test case
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • liste over viktige og ofte brukte merknader

    @Før

    @BeforeClass

    @Etter

    @Etter timen

    @Test

    @Overse