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