list junit annotations
Denne opplæringen forklarer alt om JUnit-merknader sammen med en sammenligning av merknader i JUnit 4 vs JUnit 5:
Vi lærte de forskjellige måtene å utføre JUnit-testtilfeller på, og så hvordan vi oppretter og utfører en testpakke i vår forrige opplæring.
I denne opplæringen vil vi bli kjent med det fremtredende aspektet av JUnit som kalles Kommentarer. Med utgangspunkt i JUnit 4 er merknader på plass og gjør JUnit veldig enkel, mer fordelaktig og mye mer brukervennlig å bruke.
Kommentarer er et Java API som gjør det mulig for JVM å gjenkjenne typen metode som er definert i testklassen. Det er ”livssykluser som gir tilbakemeldinger” som ofte brukes.
=> Besøk her for å lære JUnit From Scratch.
Hva du vil lære:
JUnit-merknader - JUnit 4 vs JUnit 5
En testutførelse går gjennom forskjellige stadier av livssyklusen som gitt nedenfor:
- Før du starter en test, er det visse aktiviteter som skal utføres etter oppstart av en klasse.
- Visse andre aktiviteter som skal utføres før en testcase begynner å kjøres.
- Visse aktiviteter som må utføres etter gjennomføring av testen og
- Visse aktiviteter på slutten av gjennomføringen av alle testene i en klasse.
For å fastslå at disse aktivitetene utføres gjennom hvert trinn i Java-livssyklusen, må det være visse brukerdefinerte metoder eller funksjoner som kalles ‘ tilbakekallingsmetoder for livssyklus .
Oppførselen til disse tilbakekallingsmetoder for livssyklus bestemmes av den innebygde tilbakekalling av livssykluskommentarer ' brukt i JUnit.
Eksempel: La oss prøve å gjøre det enda enklere ved å relatere disse tilbakekallingsmetodene og kommentarene til livssyklusen til et eksempel på teste en kaffeautomat.
- En metode maskinKlar () som sjekker om det kan være behov for vann, melk og kaffebønner før maskinen slås på.
- En annen metode startMachine () som slår på maskinen, kan det være nødvendig å plassere en ny, ny papirkopp i maskinen.
- En testcase som sjekker Varmt vann () ’Alternativ.
- En annen testcase som sjekker Cappuccino () ’Alternativ.
- En annen testcase som sjekker ExpressoCoffee () ’Alternativ.
- En annen metode “ throwCup () ”Som kaster de brukte koppene i søpla.
- En klassemetode “ throwTrashandSwitchOff () ”Kaster overfylt avfallsvæske fra skuffen i bassenget og slår av maskinen.
Så i eksemplet ovenfor, her er hvordan livssyklusen til testen følger:
- startMachine () vil kjøre før hver testcase - Varmt vann (), Cappuccino () og ExpressoCoffee () kjører.
- Hver av denne testcase følger også metoden throwCup ().
- Metodene maskinKlar () og throwTrashandSwitchOff () er klassenivåmetode som bare kjøres en gang for en klasse. Metoden maskinKlar () kjører en gang mens klassen starter kjøring. Metoden throwTrashandSwitchOff () kjører en gang etter at alle testsakene er fullført.
Nå oppstår spørsmålet dette er bare Java-metoder, da:
hva er nettverksnøkkel på ruteren
- Hvordan vil vi insistere på at JVM kjører maskinKlar () bare en gang på klassenivå og throwTrashandSwitchOff () på slutten av klasseutførelsen?
- Hvordan skal vi få JVM til å vite det startMachine () og throwCup () må kjøres før henholdsvis kjøring av hver testcase og etter fullføring av hver testcase-kjøring?
- Hvordan kan vi få JVM til å identifisere at metodene Varmt vann (), Cappuccino () og ExpressoCoffee () skal testsaker kjøres?
Svar: Det eneste svaret på de ovennevnte spørsmålene er at tilbakeringingskommentarene for livssyklusen gjør all nødvendig magi.
(For nå, la oss anta at vi lager denne klassen i JUnit 4)
Livssykluskommentarene - @BeforeClass, @AfterClass, @Before, @After, og @Test er de virkelige svarene på de ovennevnte tre spørsmålene. Vi er ganske sikre på at etter å ha lest tipsene nedenfor, vil du bli klar med tilbakekallingsmerknader og arbeidsflyt.
- Kommenter metoden maskinKlar () med @BeforeClass og JVM vil få den til å kjøre en gang i løpet av timen.
- Kommenter metoden kaste søppel () med @Etter timen og JVM vil få det til å løpe en gang på slutten av klassen.
- Kommenter metoden startMachine () med @Før og JVM vil kjøre den før hver testcase kjøres.
- Kommenter metoden throwCup () med @Etter og JVM vil kjøre det etter gjennomføringen av hver testsak.
- Kommenter hver av disse metodene Varmt vann (), Cappuccino () og ExpressoCoffee () med @Test og JVM vet at dette er kjernetesttilfellene for JUnit-klassen som skal utføres.
La oss raskt se på JUnit livssyklus tilbakekalling av merknader for JUnit 4 vs JUnit 5
JUNIT 4 ANMERKNING | JUNIT 5 ANMERKNING | |
---|---|---|
@RepeatedTest | 1.JUnit 5 støtter gjentatt kjøring av testmetoden et visst antall ganger ved hjelp av @RepeatedTest-kommentar | |
@Før | @BeforeEach | |
@Etter | @EfterEach | |
@BeforeClass | @BeforeAll | |
@Etter timen | @Tross alt | |
@Test | @Test |
Sekvensiell arbeidsflyt av livssykluskommentarene
Nedenfor er den sekvensielle arbeidsflyten for livssykluskommentarene for JUnit 4:
- Metoden kommentert med @BeforeClass kjøres en gang i starten av klassen.
- Metoden kommentert med @Before kjøres før Testcase 1 begynner.
- Metoden Testcase1 kommentert med @Test er testcase i klassen.
- Metoden kommentert med @ After kjører etter at Testcase 1 fullfører kjøringen.
- Metoden kommentert med @Before kjøres før Testcase 2 begynner.
- Metoden Testcase2 kommentert med @Test er testcase i klassen.
- Metoden kommentert med @ After kjører etter at Testcase 2 fullfører kjøringen.
- Metoden kommentert med @AfterClass kjøres en gang på slutten av klassen etter at både testcase 1 og 2 er utført.
Den sekvensielle arbeidsflyten for livssykluskommentarene for JUnit 5 er som følger:
- Metoden kommentert med @BeforeAll kjøres en gang i starten av klassen.
- Metoden kommentert med @BeforeEach kjøres før Testcase 1 begynner.
- Metoden Testcase1 kommentert med @Test er testcase i klassen.
- Metoden kommentert med @AfterEach kjører etter at Testcase 1 fullfører kjøringen.
- Metoden kommentert med @BeforeEach kjøres før Testcase 2 begynner.
- Metoden Testcase2 kommentert med @Test er testcase i klassen.
- Metoden kommentert med @AfterEach kjører etter at Testcase 2 fullfører kjøringen.
- Metoden kommentert med @AfterAll utføres en gang på slutten av klassen etter at både testcase 1 og 2 er utført.
Utdyping om hver kommentar
I denne delen, la oss dykke og ha en detaljert forståelse av hva hver av livssyklusene kaller tilbakemelding:
@Before (JUnit 4) / @ BeforeEach (JUnit 5):
- Den merkede metoden utføres før kjøringen av hver testmetode i testklassen.
- Denne kommentaren kan brukes når du ønsker å ha ressursene eller testdataene satt opp rett før initieringen av hver test.
- For eksempel, hvis det er 5 testkasser i en JUnit-testklasse, utføres metoden som er merket med @ Before / @ BeforeEach 5 ganger før hver utførelse av testsaken.
@After (JUnit 4) / @ AfterEach (JUnit 5):
- Den merkede metoden kjøres etter hver testmetode i testklassen kjøres.
- Denne kommentaren kan brukes når du ønsker å måtte frigjøre brukte ressurser eller testdata etter at hver testsak kjører.
- For eksempel, hvis det er 5 testkasser i en JUnit-testklasse, utføres metoden som er merket med @ After / @ AfterEach 5 ganger etter at testsakene er utført.
@BeforeClass (JUnit 4) / @ BeforeAll (JUnit 5):
- Den merkede metoden kjøres før alle testmetodene i en testklasse kjøres.
- Denne kommentaren kan brukes når du ønsker å sette opp ressurser eller teste data på klassenivå.
- Siden denne metoden er kommentert med @ BeforeClass / @ BeforeAll utføres bare en gang for en testklasse, og kopien av metoden blir delt over klassen, og metoden må oppgis statisk.
- For eksempel, hvis det er 5 testkasser i en JUnit-testklasse, merkes metoden med @ BeforeClass / @ BeforeAll en gang per testklasse før en testcase starter.
@AfterClass (JUnit 4) / @ AfterAll (JUnit 5):
- Den merkede metoden kjøres etter at alle testmetodene i en testklasse kjøres.
- Denne kommentaren kan brukes når du ønsker å frigjøre de brukte ressursene eller teste data på klassenivå.
- Siden denne metoden er kommentert med @ AfterClass / @ AfterAll utføres bare én gang for en testklasse, og kopien av metoden blir delt over klassen, må metoden oppgis statisk.
- For eksempel, hvis det er 5 testkasser i en JUnit-testklasse, merkes metoden med @ AfterClass / @ AfterAll én gang per testklasse etter at alle testtilfellene er fullført.
@Test (JUnit 4 & JUnit 5):
- @Test-merknaden er vanlig for JUnit 4 så vel som JUnit 5. De merkede metodene representerer testsakene i klassen.
- Det kan være flere metoder som hver er merket med @Test i en JUnit-klasse. Dette innebærer at en klasse kan ha flere testtilfeller.
- Det er forskjellige attributter eller parametere for å teste hvilken som kan sendes. Du kan legge til en tvunget tidsavbrudd for en prøvesak eller legge til et unntak. Dette vil bli dekket i detalj i en egen opplæring.
- Den merkede metoden kan ikke være privat eller statisk og kan ikke returnere noen verdi.
- @Test-metoden må erklæres som offentlig i JUnit 4, mens Junit 5 tillater en testcase definert uten tilgangsmodifisereren 'offentlig', da den anser 'ingen tilgangsmodifikator' som 'offentlig' som standard.
Grunnleggende JUNIT-testeksempel
En grunnleggende JUNIT 4 eksempel for merknader @BeforeClass, @Before, @Test, @After og @AfterClass ble vist gjennom koden med forklaring i vår tidligere opplæring om 'Test Fixtures'.
La oss se på det grunnleggende JUnit 5 Program for å demonstrere hvordan Lifecycle call-back-merknader @BeforeAll, @BeforeEach, @Test, @AfterEach og @AfterAll.
Kode for JUnit5Program.java:
public class JUnit5Program { @BeforeAll public static void preClass() { System.out.println('@BeforeAll – the annotated method runs once before all other methods execute'); } @BeforeEach public void setUp() { System.out.println('_______________________________________________________
'); System.out.println('@BeforeEach – the annotated method executes before each test '); } @Test public void test_JUnit1() { System.out.println('@Test – this is test case 1'); } @Test public void test_JUnit2() { System.out.println('@Test – this is test case 2'); } @Test public void test_JUnit3() { System.out.println('@Test – this is test case 3'); } @AfterEach public void tearDown() { System.out.println('@AfterEach – the annotated method executes after each test executes'); System.out.println('_______________________________________________________
'); } @AfterAll public static void postClass() { System.out.println('@AfterAll – the annotated method runs once after all other methods execute'); } }
Ved kjøring av klassefilen vises resultatet nedenfor i konsollvinduet.
Ytterligere merknader - JUnit 4 vs JUnit 5
Det er mange ekstra merknader som brukes til bestemte formål. Vi vil se listen over merknader for JUnit 4 vs JUnit 5 og formålet den tjener kort.
Det vil være en detaljert veiledning om hver av disse merknadene i våre kommende opplæringsprogrammer.
JUNIT 4 ANMERKNING | JUNIT 5 ANMERKNING | Kort beskrivelse |
---|---|---|
@FixMethodOrder | @TestMethodOrder & @Order | 1. Disse kommentarene lar brukeren velge rekkefølgen for utførelse av metodene i en testklasse |
@Rule & @ClassRule | @ExtendWith | 1. @Rule - Kommentaren utvides fra klassen TestRule som hjelper med å anvende visse regler på testsakene. 2. For eksempel: å opprette en midlertidig mappe før utførelse av testsak og slette mappen etter kjøring kan settes gjennom en regel. 3. @Rule er bare tilgjengelig i JUnit 4 som kan brukes i JUnit 5 Vintage, men @ExtendWith gir en nærmere funksjon for JUnit 5 4. Tilsvarende kan et globalt tidsavbrudd settes ved hjelp av @Rule. |
NA | @TestFabrikk | 1. Denne merknaden støttes bare av JUnit 5 og hjelper til med å lage dynamiske eller kjøretidstester. 2. Den returnerer en datastrøm som innsamling og kan ikke bruke tilbakeringingskommentarer for livssyklusen |
NA | @Nestet | 1. Denne kommentaren støttes bare av JUnit Jupiter 2.Det hjelper oss å lage nestede testtilfeller. 3. For eksempel kan klasse 1 med testcase 1 ha en @ nestet klasse 2 med testcase 2. Dette gjør testcase 2 til en nestet testcase til testcase 1. Derfor utføres testcase 1 og deretter testcase 2. 4.Hvis @Nested-merknaden ikke brukes, vil den nestede klassen ikke utføre. |
@Kategori | @Stikkord | 1. Denne merknaden hjelper til med å merke og filtrere testene 2. Du kan inkludere tester for utførelse eller ekskludere dem ved å filtrere basert på kategoriene de faller i. |
@RunWith (Parameterized.class) @ Parameterized.Parameters | @ParameterizedTest og @ValueSource | 1. Denne merknaden brukes til å kjøre en metode med testdatavariasjoner flere ganger. 2.JUnit 4 støtter @RunWith og @Parameters mens JUnit 5 Jupiter støtter @ParameterizedTest med @ValueSource |
@DisplayName | 1. Et brukerdefinert navn kan gis til en testmetode eller klasse for visningsformål. | |
@TestInstance (LifeCycle.PER_CLASS) og @TestInstance (LifeCycle.PER_METHOD) | 1. JUnit 5 støtter konfigurasjonen av livssyklusen til testene. 2. Både JUnit 4 og 5 følger standard tilbakeringing per metodes livssyklus, mens konfigurasjon per klasse også kan gjøres. |
Referanser => JUnit 4 , JUnit 5
Konklusjon
- Vi lærte om tilbakekallingskommentarene for livssyklusen og den sekvensielle arbeidsflyten testmetodene utfører basert på kommentarene.
- Vi lærte kommentarene som ble brukt for JUnit 4 og kommentarene for JUnit 5.
- Vi lærte også om ytterligere merknader som JUnit 4 støtter, og de som bare støtter JUnit 5.
=> Se opp den enkle JUnit treningsserien her.
Anbefalt lesing
- Hva er en JUnit-testarmatur: Veiledning med JUnit 4-eksempler
- JUnit-tester: Hvordan skrive JUnit-testtilfeller med eksempler
- JUnit Tutorial for nybegynnere - Hva er JUnit-testing
- Last ned, installer og konfigurer JUnit i formørkelse
- Flere måter å utføre JUnit-tester på
- Introduksjon til JUnit Framework and Its Usage in Selenium Script - Selenium Tutorial # 11
- Skjult liste for matrise og andre samlinger i Java
- Java-listemetoder - Sorterliste, Inneholder, Legg til liste, Fjern liste