JUnit Annoteringsveiledning med eksempel: Hva er @Test og @Etter

Hva er JUnit Merknader?

JUnit Merknader er en spesiell form for syntaktisk metadata som kan legges til Java kildekode for bedre kodelesbarhet og struktur. Variabler, parametere, pakker, metoder og klasser kan kommenteres. Merknader ble introdusert i Junit4, som gjรธr Java koden mer lesbar og enkel. Dette er den store forskjellen mellom Junit3 og Junit4 at Junit4 er annotasjonsbasert.

Med kunnskap om merknader i Junit5 kan man enkelt lรฆre og implementere en JUnit test. Nedenfor er det viktige og ofte brukte JUnit annoteringsliste:

S.No. Merknader Tekniske beskrivelser
1. @Test Denne merknaden er en erstatning av org.junit.TestCase som indikerer at den offentlige void-metoden den er knyttet til kan utfรธres som en testsak.
2. @Fรธr Denne merknaden brukes hvis du รธnsker รฅ utfรธre en setning som forutsetninger fรธr hvert testtilfelle.
3. @BeforeClass Denne merknaden brukes hvis du รธnsker รฅ utfรธre noen setninger fรธr alle testtilfellene for f.eks. testforbindelse mรฅ utfรธres fรธr alle testtilfellene.
4. @Etter Denne merknaden kan brukes hvis du รธnsker รฅ utfรธre noen setninger etter hver Testsak for for eksempel tilbakestilling av variabler, sletting av midlertidige filer, variabler, etc.
5. @Etter timen Denne merknaden kan brukes hvis du รธnsker รฅ utfรธre noen utsagn etter alle testtilfeller for f.eks. Frigjรธring av ressurser etter รฅ ha utfรธrt alle testtilfeller.
6. @Ignorerer Denne merknaden kan brukes hvis du vil ignorere noen utsagn under testkjรธring for f.eks. deaktivere noen testtilfeller under testkjรธring.
7. @Test(timeout=500) Denne merknaden kan brukes hvis du รธnsker รฅ sette noen tidsavbrudd under testkjรธring, for eksempel hvis du jobber under en SLA (Service Level Agreement), og tester mรฅ fullfรธres innen en viss tid.
8. @Test(expected=IllegalArgumentException.class) Denne merknaden kan brukes hvis du รธnsker รฅ hรฅndtere noen unntak under testkjรธring. For eksempel hvis du vil sjekke om en bestemt metode gir spesifisert unntak eller ikke.

JUnit Eksempel pรฅ merknader

La oss lage en klasse som dekker viktig JUnit merknader med enkle utskriftssetninger og utfรธr den med en testlรธperklasse:

Trinn 1) Tenk pรฅ at java-klassen nedenfor har forskjellige metoder som er knyttet til merknadene ovenfor:

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");					

    }		

}		

Trinn 2) la oss lage en testlรธperklasse for รฅ utfรธre testen ovenfor:

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());							
   }		
}      	

forventet resultat

  • Alle testtilfellene vil bli utfรธrt รฉn etter รฉn, og all utskriftssetning kan sees pรฅ en konsoll.
  • Som diskutert i tabellen ovenfor @Fรธr annotering i JUnit, @BeforeClass [ metode m1() og m2() ] vil bli utfรธrt fรธr hver og fรธr alle testtilfeller.
  • Pรฅ samme mรฅte @After in JUnit, @afterClass (metode m3() og m4()) vil bli utfรธrt etter henholdsvis hver og etter alle testtilfeller. @ignore (metode m6()) vil bli behandlet som รฅ ignorere testen.

La oss analysere testtilfeller brukt i java-klassen ovenfor i detalj:

  1. Vurder metode m5() som gitt nedenfor:
	@Test		
    public void 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 usann.
  • assertFalse(list.isEmpty()) mรฅ returnere sant.
  • Som et resultat vil testsaken passere.

Siden du bare har lagt til รฉn streng i listen, er stรธrrelsen รฉn.

  • list.size() mรฅ returnere int-verdi som "1" .
  • So assertEquals(1, list.size()) mรฅ returnere sant.
  • Som et resultat vil testsaken passere.
  1. Vurder metode m7() som gitt nedenfor:
@Test(timeout = 10)		
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

Som diskutert ovenfor @Test(tidsavbrudd = 10)merknad brukes til รฅ fremtvinge tidsavbrudd i testsaken.

  1. Vurder metode m8() som gitt nedenfor:
@Test(expected = NoSuchMethodException.class)				
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					
    
    }		

Som diskutert ovenfor @Test(forventet) vil se etter spesifisert unntak under kjรธringen, sรฅ metode m8() vil kaste "No Such Method Exception." Som et resultat vil testen bli utfรธrt med et unntak.

Ettersom alle testtilfeller er bestรฅtt, resulterer dette i en vellykket testgjennomfรธring.

Egentlige resultatet

Siden det er tre testtilfeller i eksemplet ovenfor, vil alle testtilfeller bli utfรธrt รฉn etter รฉn. Se utdata nedenfor:

JUnit Eksempel pรฅ merknader
JUnit Eksempel pรฅ merknader

Se utskriftserklรฆringene nedenfor som kan sees pรฅ konsollen:

Ved รฅ bruke @BeforeClass , utfรธrt fรธr alle testtilfeller

Bruke @Before-kommentarer, utfรธrt fรธr hver testcase

Ved hjelp av @After, utfรธrt etter hvert testtilfelle

Bruke @Before-kommentarer, utfรธrt fรธr hver testcase

Ved รฅ bruke @Test(timeout), kan den brukes til รฅ fremtvinge timeout i JUnit4 testcase

Ved hjelp av @After, utfรธrt etter hvert testtilfelle

Bruke @Before-kommentarer, utfรธrt fรธr hver testcase

Ved รฅ bruke @Test(expected), vil den se etter spesifisert unntak under kjรธringen

Ved hjelp av @After, utfรธrt etter hvert testtilfelle

Ved รฅ bruke @AfterClass, utfรธrt etter alle testtilfeller

JUnit Pรฅstรฅ klasse

Denne klassen gir en haug med pรฅstandsmetoder som er nyttige for รฅ skrive en testsak. Hvis alle pรฅstander er bestรฅtt, er testresultatene vellykkede. Hvis en pรฅstandssetning mislykkes, mislykkes testresultatene.

Som du sรฅ tidligere, beskriver tabellen nedenfor viktige Assert-metoder og beskrivelse:

S.No. Metode Tekniske beskrivelser
1. void assertEquals(boolsk forventet, boolsk faktisk) Den sjekker om to verdier er lik lik lik metode for objektklassen
2. void assertFalse (boolsk tilstand) funksjonalitet er รฅ sjekke at en betingelse er falsk.
3. void assertNotNull(Objektobjekt) "assertNotNull" funksjonalitet er รฅ sjekke at et objekt ikke er null.
4. void assertNull(Objektobjekt) "assertNull" funksjonalitet er รฅ sjekke at et objekt er null.
5. void assertTrue (boolsk tilstand) "assertTrue" funksjonalitet er รฅ sjekke at en betingelse er sann.
6. void fail() Hvis du vil kaste en pรฅstandsfeil, har du fail() som alltid resulterer i en feilbeslutning.
7. void assertSame([Strengmelding] "assertSame" funksjonalitet er รฅ sjekke at de to objektene refererer til det samme objektet.
8. void assertNotSame([String message] "assertNotSame" funksjonalitet er รฅ sjekke at de to objektene ikke refererer til det samme objektet.

JUnit Testtilfeller klasse

For รฅ kjรธre flere tester, er TestCase-klassen tilgjengelig i org.junit.TestCase pakker. @Testkommentar forteller JUnit at denne offentlige void-metoden (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 Tekniske beskrivelser
1. int countTestCases() Denne metoden brukes til รฅ telle hvor mange antall testtilfeller utfรธrt av kjรธr(Testresultat tr) metoden.
2. TestResult createResult() Denne metoden brukes til รฅ lage en Prรธve resultater gjenstand.
3. String getName() Denne metoden returnerer en streng som ikke er annet enn en TestCase.
4. TestResult run() Denne metoden brukes til รฅ utfรธre en test som returnerer en Prรธve resultater objekt
5. ugyldig kjรธring (testresultatresultat) Denne metoden brukes til รฅ utfรธre en test som har en Prรธve resultater objekt som ikke returnerer noe.
6. void setName (strengnavn) Denne metoden brukes til รฅ angi et navn pรฅ en TestCase.
7. void oppsett() Denne metoden brukes til รฅ skrive ressurstilknytningskode. f.eks. Opprett en databaseforbindelse.
8. void tearDown() Denne metoden brukes til รฅ skrive ressursutgivelseskode. f.eks. Frigjรธr databaseforbindelsen etter รฅ ha utfรธrt transaksjonsoperasjon.

JUnit Testresultatklasse

Nรฅr du utfรธrer en test, returnerer den et resultat (i form av Prรธve resultater gjenstand). Dette TestResult-objektet kan brukes til รฅ analysere det resulterende objektet. Dette testresultatet kan enten vรฆre mislykket eller vellykket.

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

S.No. Metode Tekniske beskrivelser
1. void addError(Test test, Kastbar t) Denne metoden brukes hvis du trenger รฅ legge til en feil i testen.
2. void addFailure(Testtest, 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 for รฅ fรฅ feilen oppdaget under testkjรธring.
5. Oppregning feil() Denne metoden returnerer ganske enkelt en samling (Opptelling her) av feil.
6. int failureCount() Denne metoden brukes til รฅ fรฅ tellingen av feil oppdaget under testkjรธring.
7. ugyldig kjรธring (TestCase-test) Denne metoden brukes til รฅ utfรธre en testsak.
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. void stop() Denne metoden brukes til รฅ prรธvekjรธring som skal stoppes.

JUnit Testsuite klasse

Hvis du รธnsker รฅ utfรธre flere tester i en spesifisert rekkefรธlge, kan det gjรธres ved รฅ kombinere alle testene pรฅ ett sted. Dette stedet kalles som testsuitene.

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

S.No. Metode Tekniske beskrivelser
1. void addTest (Test test) Denne metoden brukes hvis du vil legge til en test i suiten.
2. void addTestSuite(Klasse testklasse) Denne metoden brukes hvis du vil spesifisere klassen mens du legger til en test til suiten.
3. int countTestCases() Denne metoden brukes hvis du รธnsker รฅ telle antall testtilfeller.
4. String getName() Denne metoden brukes for รฅ fรฅ navnet pรฅ testpakken.
5. ugyldig kjรธring (testresultatresultat) Denne metoden brukes til รฅ utfรธre en test og samle inn testresultater Prรธve resultater gjenstand.
6. void setName (strengnavn) Denne metoden brukes til รฅ angi navnet pรฅ TestSuite.
7. Test testAt(int index) Denne metoden brukes hvis du รธnsker รฅ returnere testen ved gitt indeks.
8. int testCount() Denne metoden brukes hvis du รธnsker รฅ returnere en rekke tester i Suiten.
9. statisk testadvarsel (strengmelding) Denne metoden returnerer en test som vil mislykkes og logger en advarselsmelding.

Sammendrag

  • JUnit gir en bรฆrbar API, som gir alle viktige klasser og Selenium merknader som er nyttige for รฅ skrive en enhetstest.
  • Klasser som er veldig nyttige nรฅr du skriver en testcase
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • Viktig og ofte brukt JUnit annoteringsliste@Before@BeforeClass@After

    @Etter timen

    @Test

    @Overse

Oppsummer dette innlegget med: