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:
- 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.
- 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.
- 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:
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