JUnit Annotations Tutorial med exempel

Innehållsförteckning:

Anonim

Vad är JUnit-anteckningar?

JUNIT ANNOTATIONS är en speciell form av syntaktisk metadata som kan läggas till Java-källkoden för bättre kodläsbarhet och struktur. Variabler, parametrar, paket, metoder och klasser kan antecknas. Kommentarer introducerades i Junit4, vilket gör Java-koden mer läsbar och enkel. Detta är den stora skillnaden mellan Junit3 och Junit4 som Junit4 är baserad på anteckningar.

Med kunskapen om anteckningar i Junit5 kan man enkelt lära sig och implementera ett JUnit-test. Nedan är listan över viktiga och ofta använda anteckningar:

S.No. Kommentarer Beskrivning
1. @Testa Denna kommentar är en ersättning för org.junit.TestCase som indikerar att den offentliga ogiltiga metoden som den är kopplad till kan köras som ett testfall.
2. @Innan Den här anteckningen används om du vill utföra vissa uttalanden som förutsättningar före varje testfall.
3. @Innan lektionen Denna kommentar används om du vill utföra vissa uttalanden innan alla testfall för t.ex. testanslutning måste utföras före alla testfall.
4. @Efter Denna kommentar kan användas om du vill utföra vissa uttalanden efter varje testfall för att t.ex. återställa variabler, ta bort tillfälliga filer, variabler etc.
5. @Efter lektionen Denna kommentar kan användas om du vill utföra vissa uttalanden efter alla testfall för t.ex. att släppa resurser efter att alla testfall har utförts.
6. @ Ignorerar Denna kommentar kan användas om du vill ignorera vissa uttalanden under testkörningen för att t.ex. inaktivera vissa testfall under testkörningen.
7. @Test (timeout = 500) Denna kommentar kan användas om du vill ställa in en viss tidsavbrott under testkörningen, t.ex. om du arbetar under något SLA (servicenivåavtal), och testerna måste slutföras inom en viss tid.
8. @Test (förväntat = IllegalArgumentException.class) Denna kommentar kan användas om du vill hantera något undantag under testkörningen. För till exempel om du vill kontrollera om en viss metod kastar angivna undantag eller inte.

I den här handledningen lär du dig-

  • JUnit-anteckningar Exempel
  • JUnit Assert Class
  • JUnit testfall klass
  • JUnit TestResult Class
  • JUnit Test Suite-klass

JUnit-anteckningar Exempel

Låt oss skapa en klass som täcker viktiga JUnit-anteckningar med enkla utskriftsuttalanden och kör den med en testlöparklass:

Steg 1) Tänk nedan på Java-klassen som har olika metoder som är kopplade till ovan nämnda anteckningar:

JunitAnnotationsExample.java

paket guru99.junit;importera statisk org.junit.Assert.assertEquals;importera statisk org.junit.Assert.assertFalse;importera java.util.ArrayList;importera org.junit.After;importera org.junit.AfterClass;importera org.junit.Before;importera org.junit.BeforeClass;importera org.junit.Ignore;importera org.junit.Test;offentlig klass JunitAnnotationsExample {privat ArrayList  -lista;@Innan lektionenoffentligt statiskt tomrum m1 () {System.out.println ("Använda @BeforeClass, körs före alla testfall");}@Innanoffentligt tomrum m2 () {lista = ny ArrayList  ();System.out.println ("Använda @Before-anteckningar, körda före varje testfall");}@Efter lektionenoffentligt statiskt tomrum m3 () {System.out.println ("använder @AfterClass, körs efter alla testfall");}@Efteroffentligt tomrum m4 () {list.clear ();System.out.println ("Använda @ After, körs efter varje testfall");}@Testaoffentligt tomrum m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@Ignoreraoffentligt tomrum m6 () {System.out.println ("Med @Ignore ignoreras denna körning");}@Test (timeout = 10)offentligt tomrum m7 () {System.out.println ("Med hjälp av @Test (timeout) kan den användas för att genomdriva timeout i JUnit4 testfall");}@Test (förväntat = NoSuchMethodException.class)offentligt tomrum m8 () {System.out.println ("Med hjälp av @Test (förväntat), kommer det att kontrollera om angivet undantag under dess körning");}}

Steg 2) låt oss skapa en testlöparklass för att utföra ovanstående test:

TestRunner.java

paket guru99.junit;importera org.junit.runner.JUnitCore;importera org.junit.runner.Result;importera org.junit.runner.notification.Failure;offentlig klass TestRunner {public static void main (String [] args) {Resultatresultat = JUnitCore.runClasses (JunitAnnotationsExample.class);för (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Resultat ==" + result.wasSuccessful ());}}

Förväntat resultat

  • Alla testfall kommer att utföras en efter en och alla utskriftsuttalanden kan ses på en konsol.
  • Som diskuterats i ovanstående tabell @Before kommer @BeforeClass [metod m1 () och m2 ()] att köras före respektive respektive före alla testfall.
  • På samma sätt @ efter kommer @ efterklass (metod m3 () och m4 ()) att utföras efter respektive respektive testfall. @ignore (metod m6 ()) behandlas som att ignorera testet.

Låt oss analysera testfall som används i Java-klassen ovan i detalj:

  1. Tänk på metod m5 () enligt nedan:
@Testaoffentligt tomrum m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}

I ovanstående metod när du lägger till en sträng i variabeln "lista" så

  • list.isEmpty () returnerar falskt.
  • assertFalse (list.isEmpty ()) måste returnera true.
  • Som ett resultat kommer testfallet att klara .

Eftersom du bara har lagt till en sträng i listan är storleken en.

  • list.size () måste returnera int-värdet som "1".
  • assertEquals (1, list.size ()) måste returnera true.
  • Som ett resultat kommer testfallet att klara .
  1. Tänk på metod m7 () enligt nedan:
@Test (timeout = 10)offentligt tomrum m7 () {System.out.println ("Med hjälp av @Test (timeout) kan den användas för att genomdriva timeout i JUnit4 testfall");}

Som diskuterats ovan används @Test (timeout = 10) anteckningar för att genomdriva timeout i testfallet.

  1. Tänk på metod m8 () enligt nedan:
@Test (förväntat = NoSuchMethodException.class)offentligt tomrum m8 () {System.out.println ("Med hjälp av @Test (förväntat), kommer det att kontrollera om angivet undantag under dess körning");}

Som diskuterats ovan kommer @Test (förväntat) att söka efter angivet undantag under körningen så metod m8 () kommer att kasta "Inget sådant metodundantag." Som ett resultat kommer testet att utföras med ett undantag.

Eftersom alla testfall passeras resulterar detta i ett framgångsrikt testkörning.

Faktiskt resultat

Eftersom det finns tre testfall i ovanstående exempel kommer alla testfall att utföras en efter en. Se utdata nedan :

Se nedan utskriftsuttalanden som kan ses på konsolen:

Med @BeforeClass, körs före alla testfall

Med @Before-anteckningar, körs före varje testfall

Med @After körs efter varje testfall

Med @Before-anteckningar, körs före varje testfall

Med @Test (timeout) kan den användas för att genomdriva timeout i JUnit4 testfall

Med @After körs efter varje testfall

Med @Before-anteckningar, körs före varje testfall

Med hjälp av @Test (förväntat) kommer den att söka efter angivet undantag under körningen

Med @After körs efter varje testfall

Med @AfterClass körs efter alla testfall

JUnit Assert Class

Denna klass ger en massa påståendemetoder som är användbara för att skriva ett testfall. Om alla påståenden är godkända är testresultaten framgångsrika. Om något påståendefel misslyckas misslyckas testresultaten.

Som du sett tidigare beskriver nedanstående tabell viktiga påståendemetoder och beskrivning:

S.No. Metod Beskrivning
1. void assertEquals (boolesk förväntad, boolsk faktisk) Den kontrollerar om två värden är lika lika med metoden för objektklass
2. void assertFalse (booleskt tillstånd) funktionalitet är att kontrollera att ett villkor är falskt.
3. void assertNotNull (Object object) "assertNotNull" -funktionaliteten är att kontrollera att ett objekt inte är null.
4. void assertNull (Object object) "assertNull" funktionalitet är att kontrollera att ett objekt är null.
5. void assertTrue (booleskt tillstånd) "assertTrue" funktionalitet är att kontrollera att ett villkor är sant.
6. ogiltig misslyckande () Om du vill kasta något påståendefel har du fail () som alltid resulterar i en felbedömning.
7. void assertSame ([Strängmeddelande] "assertSame" funktionalitet är att kontrollera att de två objekten hänvisar till samma objekt.
8. void assertNotSame ([Strängmeddelande] "assertNotSame" funktionalitet är att kontrollera att de två objekten inte hänvisar till samma objekt.

JUnit testfall klass

För att köra flera test är TestCase-klassen tillgänglig i org.junit.TestCase- paket. Annotation @Test berättar för JUnit att denna offentliga ogiltiga metod (Testfall här) som den är kopplad till kan köras som ett testfall.

Nedanstående tabell visar några viktiga metoder som finns i org.junit.TestCase- klassen:

S.No. Metod Beskrivning
1. int countTestCases () Den här metoden används för att räkna hur många antal testfall som körs av körmetoden (TestResult tr) .
2. TestResult createResult () Den här metoden används för att skapa ett TestResult- objekt.
3. Sträng getName () Den här metoden returnerar en sträng som bara är ett TestCase .
4. TestResult-körning () Denna metod används för att utföra ett test som returnerar ett TestResult- objekt
5. ogiltig körning (TestResult-resultat) Denna metod används för att utföra ett test med ett TestResult- objekt som inte returnerar någonting.
6. void setName (strängnamn) Denna metod används för att ställa in ett namn på ett TestCase.
7. ogiltig setUp () Den här metoden används för att skriva resursassociationskod. t.ex. skapa en databasanslutning.
8. ogiltig tearDown () Den här metoden används för att skriva resursreleasekod. Släpp t.ex. databasanslutning efter transaktionsåtgärd.

JUnit TestResult Class

När du utför ett test returnerar det ett resultat (i form av TestResult- objekt). Detta TestResult-objekt kan användas för att analysera det resulterande objektet. Detta testresultat kan antingen misslyckas eller lyckas. Se nedanstående tabell för viktiga metoder som används i org.junit.TestResult-klassen:
S.No. Metod Beskrivning
1. void addError (Test test, Throwable t) Denna metod används om du behöver lägga till ett fel i testet.
2. void addFailure (Test test, AssertionFailedError t) Den här metoden används om du behöver lägga till ett fel i listan över fel.
3. void endTest (Test test) Denna metod används för att meddela att ett test utförs (slutfört)
4. int errorCount () Denna metod används för att få felet upptäckt under testkörningen.
5. Uppräkning -fel () Denna metod returnerar helt enkelt en samling (Uppräkning här) av fel.
6. int failCount () Denna metod används för att få antalet fel som upptäcks under testkörningen.
7. ogiltig körning (TestCase test) Denna metod används för att utföra ett testfall.
8. int runCount () Denna metod räknar helt enkelt det körda testet.
9. void startTest (Test test) Denna metod används för att meddela att ett test startas.
10. ogiltigt stopp () Denna metod används för att testköras för att stoppas.

JUnit Test Suite-klass

Om du vill utföra flera tester i en angiven ordning kan det göras genom att kombinera alla tester på ett ställe. Denna plats kallas som testsviter.

Se nedanstående tabell för viktiga metoder som används i org.junit.TestSuite- klass:

S.No. Metod Beskrivning
1. void addTest (Test test) Denna metod används om du vill lägga till ett test i sviten.
2. ogiltig addTestSuite (klass testClass) Den här metoden används om du vill ange klassen medan du lägger till ett test i sviten.
3. int countTestCases () Denna metod används om du vill räkna antalet testfall.
4. Sträng getName () Denna metod används för att få namnet på testsviten.
5. ogiltig körning (TestResult-resultat) Den här metoden används för att utföra ett test och samla testresultat i TestResult- objekt.
6. void setName (strängnamn) Denna metod används för att ställa in namnet på TestSuite .
7. Test testAt (int index) Den här metoden används om du vill returnera testet vid angivet index.
8. int testCount () Denna metod används om du vill returnera ett antal tester i sviten.
9. statisk testvarning (strängmeddelande) Den här metoden returnerar ett test som misslyckas och loggar ett varningsmeddelande.

Sammanfattning:

  • JUnit tillhandahåller ett bärbart API som ger alla viktiga klasser och anteckningar som är användbara för att skriva ett enhetstest.
  • Klasser som är mycket användbara när du skriver ett testfall
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • lista över viktiga och ofta använda anteckningar

    @Innan

    @Innan lektionen

    @Efter

    @Efter lektionen

    @Testa

    @Ignorera